這個問題是在啟動容器嘗試對容器掛載數據卷的時候出現的, 不掛載數據卷不會有這個問題。
我的數據卷掛載參數如下, 其中報錯就是因為缺少第二行, 對my.cnf文件也掛載。
-v /usr/local/docker/mysql/conf:/etc/mysql \ -v /usr/local/docker/mysql/my.cnf:/etc/mysql/my.cnf \ -v /usr/local/docker/mysql/logs:/var/log/mysql \ -v /usr/local/docker/mysql/data:/var/lib/mysql \
啟動容器之前, 先去宿主機創建這個my.cnf,
輸入命令vi /usr/local/docker/mysql/my.cnf, 加入內容:
[mysqld] user=mysql character-set-server=utf8 default_authentication_plugin=mysql_native_password secure_file_priv=/var/lib/mysql expire_logs_days=7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=1000 [client] default-character-set=utf8 [mysql] default-character-set=utf8
保存退出之后, 就可以用如下命令啟動了:
docker run -d --privileged=true \ -v /usr/local/docker/mysql/conf:/etc/mysql \ -v /usr/local/docker/mysql/logs:/var/log/mysql \ -v /usr/local/docker/mysql/data:/var/lib/mysql \ -v /usr/local/docker/mysql/my.cnf:/etc/mysql/my.cnf \ -p 33060:3306 --name=mysql -e MYSQL_ROOT_PASSWORD=123456 \ <鏡像id>
需要說明的是, 在mysql 5.7.9以后廢棄了password字段和password()函數;
用docker exec -it mysql bash命令進入容器后,輸入mysql即可連上mysql server,
輸入use mysql切換數據庫, 然后順手一個select * from user;可以看到用戶密碼字段變成了authentication_string,
要修改root密碼, 用sql語句ALTER user 'root' IDENTIFIED BY '123456';
然后用navicat就可以連上了。