【问题标题】:docker, MYSQL_ROOT_PASSWORD do not work码头工人,MYSQL_ROOT_PASSWORD 不工作
【发布时间】:2016-10-20 08:59:49
【问题描述】:

码头工人撰写:

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。

【问题讨论】:

  • 我已经在本地尝试过类似的设置(虽然 MySQL 的不同版本 - 我使用的是 5.5),但我无法在没有密码的情况下登录 MySQL。我必须添加-p 开关并且需要提供密码。
  • 用提供的 compose 测试(没有音量),似乎工作正常。

标签: docker docker-compose


【解决方案1】:

指定环境变量的格式是正确的,你可以使用任何一个

environment:
  MYSQL_ROOT_PASSWORD: a_password

environment:
  - MYSQL_ROOT_PASSWORD=a_password

对我来说,问题是我创建了带有随机密码选项集的数据库卷,然后禁用了它,但没有清除该卷。因此,无论我对 docker-compose 文件进行什么更改,带有旧登录信息的旧卷仍然存在。

我必须docker volume ls 才能找到该卷,然后docker volume rm <name> 才能删除它。重新启动后,一切正常。

【讨论】:

    【解决方案2】:

    你需要修复你的 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服务器的唯一方法。

    【讨论】:

    • 谢谢,我贴了一个片段,还有一个nginx,一个php-fpm,
    • 和nginx中的环境也不能正常工作,可能是我的系统有问题,我正在尝试重新安装它。
    • 一次只做一项服务。使 MySQL 工作,然后继续使用 nginx,然后使用 PHP。我怀疑您的系统需要重新安装。另外,尝试获取一些日志,您可以在这里询问其他问题,以找到解决方案。
    • 我在vmware中又安装了一个centos,docker运行的很好,不知道问题出在哪里,不过已经解决了。谢谢。
    • 我有一个与 MYSQL_ROOT_PASSWORD= 类似的情况,但这对我不起作用。请提供任何帮助
    【解决方案3】:

    图像entrypoint 脚本永远不会更改现有的database。如果您将现有数据目录挂载到var/lib/mysql,则MYSQL_ROOT_PASSWORD 将无效。

    解决方法

    删除所有未使用的卷:docker volume prune

    从您的数据库服务中删除卷:docker volume rm <db_data>

    关闭容器,移除卷:docker-compose down --volumes

    【讨论】:

      【解决方案4】:

      当您的目录中的卷具有错误权限时,会发生这种情况。 你可以解决这个问题,让 docker 自己创建目录。

      如果您有现有数据,您可以将新数据与之前的数据进行比较,以便应用正确的 chmod,因为这取决于 docker/your-user 是否属于根组。

      【讨论】:

      • 不仅目录的mod很重要,它的所有者也很重要。我用 sudo 启动 docker,所以我需要拥有属于 root 的挂载点。
      【解决方案5】:

      当挂载目录在 Mac 上具有 ea(扩展属性)时会发生这种情况。
      最好将目录删除一次后重新创建或使用 xattr 命令检查权限。

      $ ls -l ./db
      $ xattr ls ./db
      

      【讨论】:

        【解决方案6】:

        请注意,根据官方 docker 镜像:“如果您使用已经包含数据库的数据目录启动容器,这些变量都不会产生任何影响”。事实上,在这种情况下,您已经有一个“mysql.user”表,您应该使用那里设置的用户信息。当您尝试恢复完整转储时,也会发生同样的情况。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-19
          • 1970-01-01
          • 1970-01-01
          • 2017-02-01
          • 2016-12-20
          • 2016-01-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多