是否可以使用dockercompose生成随机的mysql密码

Bob*_*421 3 docker-compose

我正在创建一个dockercompose文件。我想用这个文件建立一个项目。该dockercompose将生成2个docker容器:一个用于mysql,另一个用于apache2。我想要做的是使一切自动化,并且我想生成一个唯一的mysql密码。有可能这样做吗?

谢谢

Dev*_*Dan 5

您可以通过环境变量为mysql设置随机密码MYSQL_RANDOM_ROOT_PASSWORD

MYSQL_RANDOM_ROOT_PASSWORD

这是一个可选变量。设置为yes可以为root用户生成一个随机的初始密码(使用pwgen)。生成的root密码将打印到stdout(GENROTED ROOT PASSWORD:.....)。

https://github.com/mysql/mysql-docker#mysql_random_root_password

Docker撰写环境变量:

https://docs.docker.com/compose/environment-variables/


编辑:替代方法-环境注入

这是一个替代策略示例,该策略允许您为MySQL和Django(或任何其他图像)使用随机密码。

您将需要使用brew,apt或yum 安装pwgen主机系统上,然后生成一个将其设置为环境变量的密码。您可以随时重新运行以更改密码。

export DB_PASSWORD=`pwgen -Bs1 12`
Run Code Online (Sandbox Code Playgroud)

简化docker-compose.yml

version: '2'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_DATABASE: db_name
      MYSQL_USER: user
      MYSQL_PASSWORD: user_password

  web:
    image: django
    volumes:
      - ./django_admin.py:/app
    expose:
      - "8000"
    links:
      - db
    environment:
      DB_PASSWORD: ${DB_PASSWORD}
Run Code Online (Sandbox Code Playgroud)

在您的中django_admin.py,您现在可以使用DB_PASSWORDenv变量:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'root',
        'PASSWORD': os.environ.get('DB_PASSWORD', ''),
        'HOST': 'host'
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 生成后,要在容器生命周期内随时获取随机 root 密码,您只需键入 `docker log <CONTAINER-NAME> 2>&1 | grep GENERATED` ( [来源](https://github.com/mysql/mysql-docker#mysql_random_root_password) ) (2认同)