Sil*_*nce 12 docker docker-compose
泊坞窗 - 撰写:
mysql:
image: mysql:5.7.16
container_name: f_mysql
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: sheep
expose:
- '3306'
Run Code Online (Sandbox Code Playgroud)
我用docker exec输入这个容器,
然后我打字echo $MYSQL_ROOT_PASSWORD了sheep,
但是mysql root密码仍然是'',
当我输入'mysql -uroot'时,我登录mysql.
Ash*_*hok 15
图像entrypoint脚本永远不会对database现有的进行更改。如果将现有数据目录挂载到其中,var/lib/mysql则MYSQL_ROOT_PASSWORD不会产生任何效果。
解决方法
删除所有未使用的卷:docker volume prune
从数据库服务中删除该卷:docker volume rm <db_data>
放下容器,删除卷:docker-compose down --volumes
gpa*_*paz 11
您需要修复docker-compose文件:
environment:
- MYSQL_ROOT_PASSWORD=sheep
Run Code Online (Sandbox Code Playgroud)
以下是完整的docker-compose,可以达到你想要的效果:
version: '2'
services:
mysql:
image: mysql:5.7.16
container_name: f_mysql
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=sheep
expose:
- '3306'
Run Code Online (Sandbox Code Playgroud)
然后使用a docker exec -it f_mysql /bin/bash和容器内部mysql -u root -p,使用sheep作为密码,将是连接到mysql服务器的唯一方法.
指定环境变量的格式是正确的,你可以使用
environment:
MYSQL_ROOT_PASSWORD: a_password
Run Code Online (Sandbox Code Playgroud)
或者
environment:
- MYSQL_ROOT_PASSWORD=a_password
Run Code Online (Sandbox Code Playgroud)
对我来说,问题是我使用随机密码选项集创建了 db 卷,然后禁用了它,但没有清除该卷。所以无论我对 docker-compose 文件做了什么更改,带有旧登录信息的旧卷仍然存在。
我必须docker volume ls找到音量然后docker volume rm <name>将其删除。重新启动后,一切正常。
| 归档时间: |
|
| 查看次数: |
24087 次 |
| 最近记录: |