搬运工-撰写:
mysql:
image: mysql:5.7.16
container_name: f_mysql
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: sheep
expose:
- '3306'
我使用docker exec
输入此容器
然后输入echo $MYSQL_ROOT_PASSWORD
,然后我获得sheep
,
但是mysql root密码仍然是'',
当我键入' mysql -uroot'时,我登录mysql。
答案 0 :(得分:4)
您需要修复docker-compose文件:
environment:
- MYSQL_ROOT_PASSWORD=sheep
以下是实现您想要的完整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'
然后使用docker exec -it f-mysql /bin/bash
并在容器mysql -u root -p
内,使用sheep作为密码,将是连接到mysql服务器的唯一方法。
答案 1 :(得分:1)
用于指定环境变量的格式正确,您可以使用其中一种
environment:
MYSQL_ROOT_PASSWORD: a_password
OR
environment:
- MYSQL_ROOT_PASSWORD=a_password
对我来说,问题是我创建了具有随机密码选项集的数据库卷,然后禁用了该卷,但尚未清除该卷。因此,无论我对docker-compose文件进行了什么更改,带有旧登录信息的旧卷仍然存在。
我必须先docker volume ls
才能找到该卷,然后docker volume rm <name>
才能将其删除。重新升级后,一切正常。
答案 2 :(得分:1)
图像entrypoint
脚本将永远不会更改现有的database
。如果将现有数据目录装入var/lib/mysql
,那么MYSQL_ROOT_PASSWORD
将无效。
解决方法
删除所有未使用的卷:docker volume prune
从数据库服务中删除卷:docker volume rm <db_data>
放下容器,删除卷:docker-compose down --volumes
答案 3 :(得分:0)
在Mac上的安装目录具有ea(扩展属性)时发生。
最好一次删除目录并重新创建目录,或者使用xattr命令检查权限。
$ ls -l ./db
$ xattr ls ./db
答案 4 :(得分:0)
当目录中的卷具有错误的权限时,会发生这种情况。 您可以修复此问题,让docker自行创建目录。
如果您有数据,可以将新数据与前一个数据进行比较,以应用正确的chmod,因为这取决于docker /您的用户是否是根组的一部分。