如何将环境变量传递给docker-compose up

时间:2018-03-15 07:44:48

标签: docker docker-compose dockerfile

我正在尝试运行一个容器。我已将图像上传到私有Docker注册表。我想写一个compose文件来下载和部署图像。但我想将TAG名称作为docker-compose run命令中的变量传递。我的compose文件如下所示。如何将KB_DB_TAG_VERSION的值作为docker-compose up命令的一部分传递?

version: '3'
services:
   db:
    #build: k-db
    user: "1000:50"
    volumes:
      - /data/mysql:/var/lib/mysql
    container_name: k-db
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    image:  XX:$KB_DB_TAG_VERSION
    image: k-db
    ports:
      - "3307:3306"

4 个答案:

答案 0 :(得分:18)

您有两个选择:

  1. 按照另一个.env file中的建议创建answer
  2. KEY=VALUE对添加到您的docker-compose命令中,例如:

    KB_DB_TAG_VERSION=kb-1.3.20-v1.0.0 docker-compose up
    

    更早地将其导出为脚本也可以,例如:

    export KB_DB_TAG_VERSION=kb-1.3.20-v1.0.0
    docker-compose up
    

答案 1 :(得分:5)

您可以在执行ModelCheckpoint命令的目录(以及docker-compose up文件所在的目录)上创建.env file,其中包含以下内容:

docker-compose.yml

您的KB_DB_TAG_VERSION=kb-1.3.20-v1.0.0 文件应如下所示(已添加docker-compose.yml{):

}

答案 2 :(得分:0)

只是为了补充其他人(尤其是@JakubKukul)概述的内容

出于安全目的,如果 docker-compose 文件受版本控制,您可能不希望在 docker-compose 文件中保留易受攻击的信息,例如用户名/密码。您也可以将主机上的环境变量映射到容器内的环境变量。在这种情况下,它可能类似于以下内容:

version: '3'
services:
   db:
    #build: k-db
    user: "1000:50"
    volumes:
      - /data/mysql:/var/lib/mysql
    container_name: k-db
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    image:  XX:$KB_DB_TAG_VERSION
    image: k-db
    ports:
      - "3307:3306"

其中 MYSQL_PASSWORD 是两者:

  1. 主机上的环境变量(可能只是在当前的 shell 会话中)
  2. 来自 db 服务的容器内的环境变量

答案 3 :(得分:-1)

在您的docker-compose.yml文件中添加

env_file:
  - .env_file

访问您的db服务,其中.env_file是您的.env文件(相应地更改其名称)。

version: '3'
services:
   db:
    #build: k-db
    user: "1000:50"
    volumes:
      - /data/mysql:/var/lib/mysql
    container_name: k-db
    env_file:
      - .env_file
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    image:  XX:$KB_DB_TAG_VERSION
    image: k-db
    ports:
      - "3307:3306"