以前用的mysql數據庫版本都是5.6的,在寫新項目的時候,發現最新版的flaway已經不支持mysql5.6了,本身的mysql也是用docker起的,既然要升級,不如順便把docker的配置文件寫了,免得以後別人遇到此問題。vue
在dockerhub中搜索mysql即可以找到mysql的鏡像,也是直接給出了docker-compose 的配置:mysql
# Use root/example as user/password credentials version: '3.1' services: db: image: mysql command: --default-authentication-plugin=mysql_native_password restart: always environment: MYSQL_ROOT_PASSWORD: example adminer: image: adminer restart: always ports: - 8080:8080
在這裏我只須要mysql5.7,把配置文件修改一下:git
version: '3.1' services: db: image: mysql:5.7 restart: always command: --default-authentication-plugin=mysql_native_password ports: - "3310:3306" environment: MYSQL_DATABASE: baeldung MYSQL_ROOT_PASSWORD: example volumes: - db:/var/lib/mysql volumes: db:
使用docker-compose up
命令成功啓動,可是後來發現密碼不太好,更改密碼爲MYSQL_ROOT_PASSWORD: 123456
,從新啓動。
但此時問題出現了,怎麼改密碼從新啓動都只能用以前的example
密碼登錄。github
當docker容器運行時,會在鏡像的基礎層上建立一個當前容器的存儲層,當容器亡時,容器存儲層也隨之消亡,任何保存於容器存儲層的信息都會隨容器刪除而丟失。sql
爲了保存數據庫中的數據,在上述docker容器中使用volumes: db:/var/lib/mysql
將/var/lib/mysql
目錄綁定到數據庫db
上。這樣一來容器中止也不會丟失數據庫中的數據,也正是如此,在第一次啓動容器時,已經把root的密碼設爲example並持久化到數據卷中了,所以再更改密碼也不會生效了。docker
使用 docker volume ls
命令能夠查看到全部數據卷:數據庫
着這裏使用的爲test_db數據卷,使用docker inspect test_db
詳細查看數據卷信息:bash
能夠看到數據卷test_db
實際上存儲在了本機的/var/lib/docker/volumes/test_db/_data
上了。spa
既然知道了是由於密碼保存在了數據卷中致使不能更改,那解決就好辦了。rest
解決方法一: 刪除數據卷
docker-compose rm -v
docker volume rm test_db
docker-compose up
解決方法二:進入容器修改密碼
由於刪除數據卷會致使以前存儲的數據也刪除,若是想保留以前的數據,能夠進入容器修改密碼。
docker container ls
將正在運行的容器列出,找到須要進入的容器:docker exec -it 620176942e96 bash
進入容器內部。mysql -u root -p
鏈接mysql數據庫。use mysql
,修改密碼update user set authentication_string=PASSWORD("xxx") where User='root';
docker-compose up
。參考連接:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
How to change 'root' password in MySQL5.7
Docker — 從入門到實踐