【问题标题】:Docker Set Up mysql db environmentDocker 搭建 mysql db 环境
【发布时间】:2018-01-17 11:01:40
【问题描述】:

大家好,我正在设置一个新的 wordpress docker 机器即时配置我的 sql db:

  db:
    build:
      context: ./Docker/mysql
      dockerfile: Dockerfile
    container_name: mysql
    volumes:
       - db_data:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
        MYSQL_DATABASE: "${DB_NAME}"
        MYSQL_USER: "${DB_USERNAME}"
        MYSQL_PASSWORD: "${DB_PASSWORD}"
    networks:
      - back

用于 sql 的 Dockerfile:

FROM mysql:latest

这也很好用,问题是我真的不知道应该在哪里设置环境属性,如数据库名称用户等。有什么建议么?

【问题讨论】:

    标签: mysql database docker docker-compose environment


    【解决方案1】:

    您可以将其设置为服务器上的环境变量,但如果您不想这样做,您可以为 compose 命令设置它们:

    DB_ROOT_PASSWORD=asdf DB_NAME=mydb DB_USERNAME=user DB_PASSWORD=pw docker compose
    

    在 cmets 中,您说您想在 Dockerfile 中设置变量。下面是一个例子:

    FROM mysql:latest
    
    ENV MYSQL_ROOT_PASSWORD=asdf
    ENV MYSQL_DATABASE=mydb
    ENV MYSQL_USER=user
    ENV MYSQL_PASSWORD=pw
    

    如果您不希望这些硬编码在 Dockerfile 中,您可以将它们与构建时间参数结合起来。

    FROM mysql:latest
    
    ENV MYSQL_ROOT_PASSWORD=$db_root_pw
    ENV MYSQL_DATABASE=$db_name
    ENV MYSQL_USER=$db_username
    ENV MYSQL_PASSWORD=$db_pw
    

    确保在构建图像时包含参数:

    docker build --build-arg db_root_pw=rootpw --build-arg db_name=mydb --build-arg db_username=user --build-arg db_pw=pw # [...]
    

    【讨论】:

    • 我希望将它们存储在我的 dockerfile 中,如果可能的话,我会在其中获取我的 sql 版本“FROM mysql:latest”
    • 在问题中显示您的Dockerfile
    【解决方案2】:

    代替environment,使用:

            env_file:
              - env_file.env
    

    并将 env_file.env(或“whateverfilename.env”)添加到您的项目目录中,内容如下:

    MYSQL_ROOT_PASSWORD=myrootpw
    MYSQL_DATABASE=mydb
    MYSQL_USER=myuser
    MYSQL_PASSWORD=mypw
    MYSQL_HOST=myhost
    

    【讨论】: