在docker-compose yml中重新使用环境variables

是否有可能重复使用多个容器共享的环境variables以避免重复,如下例所示:

version: '2' services: db: image: example/db ports: - "8443:8443" container_name: db hostname: db environment: - USER_NAME = admin - USER_PASSWORD = admin svc: image: example/svc depends_on: - db ports: - "9443:9443" container_name: svc hostname: svc environment: - DB_URL = https://db:8443 - DB_USER_NAME = admin - DB_USER_PASSWORD = admin 

您可以使用extends指令让多个容器从基础服务描述inheritanceenvironmentconfiguration。 例如,将以下内容放在名为base.yml的文件中:

 version: '2' services: base: environment: DB_URL: https://db:8443 DB_USER_NAME: admin DB_USER_PASSWORD: admin 

然后在你docker-compose.yml

 version: '2' services: container1: image: alpine command: sh -c "env; sleep 900" extends: file: base.yml service: base container2: image: alpine command: sh -c "env; sleep 900" extends: file: base.yml service: base environment: ANOTHERVAR: this is a test 

然后在container1里面,你会看到:

 DB_URL=https://db:8443 DB_USER_NAME=admin DB_USER_PASSWORD=admin 

container2里面你会看到:

 DB_URL=https://db:8443 DB_USER_NAME=admin DB_USER_PASSWORD=admin ANOTHERVAR=this is a test 

你显然可以使用extends的东西以外的environment指令; 使用docker-compose时,避免重复是一个很好的方法。

您可以从docker-compose文件中引用本地环境variables。 假设你想要做的是使USER_NAMEDB_USER_NAME相同:

泊坞窗,compose.yml

 version: '2' services: db: image: example/db ports: - "8443:8443" container_name: db hostname: db environment: - USER_NAME = ${USERNAME} - USER_PASSWORD = ${PASSWORD} svc: image: example/svc depends_on: - db ports: - "9443:9443" container_name: svc hostname: svc environment: - DB_URL = https://db:8443 - DB_USER_NAME = ${USERNAME} - DB_USER_PASSWORD = ${PASSWORD} 

然后,运行docker-compose,如:

 $ USERNAME="admin" PASSWORD="admin" docker-compose up 

另外,对于更长久的事情,更容易打字的经常性的基础上:

 $ printf '%s\n%s\n' 'export USERNAME="admin"' 'export PASSWORD="admin"' >> ~/.bash_profile $ source ~/.bash_profile $ docker-compose up