如何将环境变量传递给Docker-合成

wribegjk  于 2022-12-26  发布在  Docker
关注(0)|答案(6)|浏览(128)

我正在尝试运行容器。我已将映像上载到专用Docker注册表。我希望编写合成文件以下载和部署映像。但我希望将TAG名称作为docker-compose run命令的变量传递。我的合成文件如下所示。如何将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"
w6mmgewl

w6mmgewl1#

您有两种选择:
1.按照另一个answer中的建议创建.env file
1.在docker-compose命令之前添加KEY=VALUE对,例如:

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
gr8qqesn

gr8qqesn2#

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

KB_DB_TAG_VERSION=kb-1.3.20-v1.0.0

docker-compose.yml文件应如下所示(添加了{}):

version: '3'
services:
   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"

修改完以上内容后,使用docker-compose config命令检查修改是否反映出来,变量会被替换为变量值,关于变量替换的详细信息请参见此处页面。

rlcwz9us

rlcwz9us3#

只是为了补充其他人,特别是@JakubKukul概述的内容
出于安全考虑,如果Docker-compose文件处于版本控制之下,您可能不希望保留易受攻击的信息,如用户名/密码。您也可以将主机上的环境变量Map到container中的环境变量。在这种情况下,可能如下所示:

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会话中)

  1. db服务的容器内的环境变量
z6psavjg

z6psavjg4#

可以在命令行上将环境变量传递给容器,* 而无需 * 在文件中指定值。在docker-compose文件中的容器服务定义上添加一个environment键,其变量名为 only(无值或赋值运算符):

db:
    ...
    environment:
        - KB_DB_TAG_VERSION

以这种方式使用,没有赋值,意味着docker-compose将在当前环境/shell中查找环境变量:

KB_DB_TAG_VERSION=mytagversion docker-compose up

参考:https://docs.docker.com/compose/environment-variables/#pass-environment-variables-to-containers

3lxsmp7m

3lxsmp7m5#

对于Windows,不使用导出,而是用途:

$env.KB_DB_TAG_VERSION = "1.3.20-v1.0.0"
docker-compose up
am46iovg

am46iovg6#

在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"

相关问题