docker,MYSQL_ROOT_PASSWORD不起作用

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_PASSWORDsheep,

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

当我输入'mysql -uroot'时,我登录mysql.

Ash*_*hok 15

图像entrypoint脚本永远不会对database现有的进行更改。如果将现有数据目录挂载到其中,var/lib/mysqlMYSQL_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服务器的唯一方法.


mar*_*son 8

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

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>将其删除。重新启动后,一切正常。