通過MySQL提供的官方鏡像啓動MySQL
docker run -p 0.0.0.0:3306:3306 -e MYSQL_ROOT_PASSWORD=toor -d mysql:5.7
參數
- -d 開啓 deamon模式
- -p port 映射端口內部本地3306到容器的3306
- -e environment 設置密碼 toor
編碼問題
採用默認的 MySQL Docker 官方鏡像啓動的MySQL字符編碼都是latin1:
解決辦法
方法一:添加啓動命令
docker run -e MYSQL_ROOT_PASSWORD=toor -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
但是很遺憾,我這裏添加這兩個命令後仍然沒有能完全奏效:
方法二:修改my.cnf
這裏有一個比較難受的地方,你可以通過docker exec -it {容器ID} /bin/bash
進入到容器中,修改my.cnf進行相關配置的修改。
但是,my.cnf修改完成後必須要重啓MySQL,然而MySQL官方的docker鏡像是以mysql進程爲deamon的,MySQL一旦停止,這個Docker 容器會立馬掛掉。再次啓動,則又是以前的配置。
因此只能基於MySQL的官方鏡像,重新構建一個加載了字符編碼配置的鏡像。
這裏我們使用dockerfile
一、首先,編寫一個配置文件
vi my.cnf
# 輸入以下內容:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server=utf8_general_ci
character-set-server=utf8
init-connect='SET NAMES utf8'
# 保存退出
:wq
二、編寫Dockerfile
vi Dockerfile
# 輸入以下內容:
from mysql:5.7
COPY my.cnf /etc/mysql/conf.d/mysqlutf8.cnf
CMD ["mysqld", "--character-set-server=utf8", "--collation-server=utf8_unicode_ci"]
三、通過Dockerfile構建Docker鏡像
docker build -t mysqlutf8 .
注意最後一個 . 別忘了
四、通過剛構建出的鏡像啓動MySQL
docker run -p 0.0.0.0:3306:3306 -e MYSQL_ROOT_PASSWORD=toor -d mysqlutf8:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
啓動後再進入MySQL查看字符集
其他
這裏的utf8mb4
和utf8
差別不大。因爲一些歷史遺留問題,導致mysql當中的utf8
並不是通用標準的utf8
,在極少數情況下會出現編碼不統一的問題 utf8mb4
纔是MySQL中提供的通用utf8
編碼標準,嚴謹起見,建議在MySQL中統一設置爲utf8mb4