docker,MYSQL_ROOT_PASSWORD不起作用

时间:2016-10-20 08:59:49

标签: 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'

我使用docker exec输入此容器

然后输入echo $MYSQL_ROOT_PASSWORD,然后我获得sheep

但是mysql root密码仍然是'',

当我键入' mysql -uroot'时,我登录mysql。

5 个答案:

答案 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 /您的用户是否是根组的一部分。