在docker-compose.yml中重复使用环境变量
是否可以重用在多个容器之间共享的环境变量 其目的是避免重复,如本例所示:在docker-compose.yml中重复使用环境变量,docker,docker-compose,environment-variables,Docker,Docker Compose,Environment Variables,是否可以重用在多个容器之间共享的环境变量 其目的是避免重复,如本例所示: 版本:“2” 服务: db: 图像:示例/db 端口: - "8443:8443" 容器名称:db 主机名:db 环境: -用户名=管理员 -用户\密码=管理员 svc: 图:示例/svc 取决于: -分贝 端口: - "9443:9443" 容器名称:svc 主机名:svc 环境: -DB_URL=https://db:8443 -DB\u USER\u NAME=admin -DB\u USER\u PASSWORD
版本:“2”
服务:
db:
图像:示例/db
端口:
- "8443:8443"
容器名称:db
主机名:db
环境:
-用户名=管理员
-用户\密码=管理员
svc:
图:示例/svc
取决于:
-分贝
端口:
- "9443:9443"
容器名称:svc
主机名:svc
环境:
-DB_URL=https://db:8443
-DB\u USER\u NAME=admin
-DB\u USER\u PASSWORD=admin
您可以从docker compose文件中引用本地环境变量。假设您想要做的是使USER\u NAME
与DB\u USER\u NAME
相同:
docker 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}
version: '3.4'
x-common-variables: &common-variables
VARIABLE: some_value
ANOTHER_VARIABLE: another_value
services:
some_service:
image: someimage
environment: *common-variables
another_service:
image: anotherimage
environment:
<<: *common-variables
NON_COMMON_VARIABLE: 'non_common_value'
version: '3.2'
services:
some_service:
image: someimage
env_file:
- 'variables.env'
another_service:
image: anotherimage
env_file:
- 'variables.env'
version: '3.2'
services:
some_service:
image: someimage
environment:
- VARIABLE
another_service:
image: anotherimage
environment:
- VARIABLE
- ANOTHER_VARIABLE
然后,运行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
您可以从docker compose文件中引用本地环境变量。假设您想要做的是使
USER\u NAME
与DB\u USER\u NAME
相同:
docker 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}
version: '3.4'
x-common-variables: &common-variables
VARIABLE: some_value
ANOTHER_VARIABLE: another_value
services:
some_service:
image: someimage
environment: *common-variables
another_service:
image: anotherimage
environment:
<<: *common-variables
NON_COMMON_VARIABLE: 'non_common_value'
version: '3.2'
services:
some_service:
image: someimage
env_file:
- 'variables.env'
another_service:
image: anotherimage
env_file:
- 'variables.env'
version: '3.2'
services:
some_service:
image: someimage
environment:
- VARIABLE
another_service:
image: anotherimage
environment:
- VARIABLE
- ANOTHER_VARIABLE
然后,运行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
您可以使用指令(在compose1.x
和2.x
中提供)让多个容器从基础服务描述继承环境
配置。例如,将以下内容放入名为base.yml
的文件中:
version: '2'
services:
base:
environment:
DB_URL: https://db:8443
DB_USER_NAME: admin
DB_USER_PASSWORD: admin
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
然后在您的docker compose.yml中:
version: '2'
services:
base:
environment:
DB_URL: https://db:8443
DB_USER_NAME: admin
DB_USER_PASSWORD: admin
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
然后在容器1的内部,您将看到:
DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
ANOTHERVAR=this is a test
在容器2的内部,您将看到:
DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
ANOTHERVAR=this is a test
显然,除了环境
指令之外,您还可以使用扩展
;使用docker compose时,这是一种避免重复的好方法。您可以使用指令(在compose1.x
和2.x
中提供)让多个容器从底层服务描述继承环境
配置。例如,将以下内容放入名为base.yml
的文件中:
version: '2'
services:
base:
environment:
DB_URL: https://db:8443
DB_USER_NAME: admin
DB_USER_PASSWORD: admin
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
然后在您的docker compose.yml中:
version: '2'
services:
base:
environment:
DB_URL: https://db:8443
DB_USER_NAME: admin
DB_USER_PASSWORD: admin
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
然后在容器1的内部,您将看到:
DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
ANOTHERVAR=this is a test
在容器2的内部,您将看到:
DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
ANOTHERVAR=this is a test
显然,除了环境
指令之外,您还可以使用扩展
;使用docker compose时,这是一种避免重复的好方法。扩展
选项可能很好,但它位于3.x
compose文件中。其他方法包括:
(撰写文件3.4+)
如果可以使用3.4+组合文件,扩展名字段可能是最佳选项:
docker 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}
version: '3.4'
x-common-variables: &common-variables
VARIABLE: some_value
ANOTHER_VARIABLE: another_value
services:
some_service:
image: someimage
environment: *common-variables
another_service:
image: anotherimage
environment:
<<: *common-variables
NON_COMMON_VARIABLE: 'non_common_value'
version: '3.2'
services:
some_service:
image: someimage
env_file:
- 'variables.env'
another_service:
image: anotherimage
env_file:
- 'variables.env'
version: '3.2'
services:
some_service:
image: someimage
environment:
- VARIABLE
another_service:
image: anotherimage
environment:
- VARIABLE
- ANOTHER_VARIABLE
变量。env
VARIABLE=some_value
ANOTHER_VARIABLE=another_value
VARIABLE=some_value
ANOTHER_VARIABLE=another_value
项目根目录中的.env
(或实际组合环境中的变量)
可以在服务配置中引用.env文件中的变量:
docker 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}
version: '3.4'
x-common-variables: &common-variables
VARIABLE: some_value
ANOTHER_VARIABLE: another_value
services:
some_service:
image: someimage
environment: *common-variables
another_service:
image: anotherimage
environment:
<<: *common-variables
NON_COMMON_VARIABLE: 'non_common_value'
version: '3.2'
services:
some_service:
image: someimage
env_file:
- 'variables.env'
another_service:
image: anotherimage
env_file:
- 'variables.env'
version: '3.2'
services:
some_service:
image: someimage
environment:
- VARIABLE
another_service:
image: anotherimage
environment:
- VARIABLE
- ANOTHER_VARIABLE
.env
VARIABLE=some_value
ANOTHER_VARIABLE=another_value
VARIABLE=some_value
ANOTHER_VARIABLE=another_value
extends
选项可能很好,但它位于3.x
组合文件中。其他方法包括:
(撰写文件3.4+)
如果可以使用3.4+组合文件,扩展名字段可能是最佳选项:
docker 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}
version: '3.4'
x-common-variables: &common-variables
VARIABLE: some_value
ANOTHER_VARIABLE: another_value
services:
some_service:
image: someimage
environment: *common-variables
another_service:
image: anotherimage
environment:
<<: *common-variables
NON_COMMON_VARIABLE: 'non_common_value'
version: '3.2'
services:
some_service:
image: someimage
env_file:
- 'variables.env'
another_service:
image: anotherimage
env_file:
- 'variables.env'
version: '3.2'
services:
some_service:
image: someimage
environment:
- VARIABLE
another_service:
image: anotherimage
environment:
- VARIABLE
- ANOTHER_VARIABLE
变量。env
VARIABLE=some_value
ANOTHER_VARIABLE=another_value
VARIABLE=some_value
ANOTHER_VARIABLE=another_value
项目根目录中的.env
(或实际组合环境中的变量)
可以在服务配置中引用.env文件中的变量:
docker 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}
version: '3.4'
x-common-variables: &common-variables
VARIABLE: some_value
ANOTHER_VARIABLE: another_value
services:
some_service:
image: someimage
environment: *common-variables
another_service:
image: anotherimage
environment:
<<: *common-variables
NON_COMMON_VARIABLE: 'non_common_value'
version: '3.2'
services:
some_service:
image: someimage
env_file:
- 'variables.env'
another_service:
image: anotherimage
env_file:
- 'variables.env'
version: '3.2'
services:
some_service:
image: someimage
environment:
- VARIABLE
another_service:
image: anotherimage
environment:
- VARIABLE
- ANOTHER_VARIABLE
.env
VARIABLE=some_value
ANOTHER_VARIABLE=another_value
VARIABLE=some_value
ANOTHER_VARIABLE=another_value
extends
适用于我的用例。它优于局部变量,因为它消除了对特定用户的依赖。使用extends
可以做的另一件事是指定通用容器标签。我可以extends
多个服务吗?或者每个服务有多个文件?对于从子目录调用内容时遇到FileNotFoundError的任何其他人,您可以使用文件的相对路径:“./base.yml”extends
适用于我的用例。它优于局部变量,因为它消除了对特定用户的依赖。使用extends
可以做的另一件事是指定通用容器标签。我可以extends
多个服务吗?或者每个服务有多个文件?对于从子目录调用内容时遇到FileNotFoundError的任何其他人,您可以使用文件的相对路径:“./base.yml”我认为$USERNAME=“admin”PASSWORD=“admin”docker compose
不好。黑客喜欢$history
并使用历史记录获取密码cmd@ChangwooRhee如果您在本地使用docker compose的敏感凭据,您会遇到与技术无关的问题,我认为$USERNAME=“admin”PASSWORD=“admin”docker compose up
不好。黑客喜欢$history
并使用历史记录获取密码cmd@ChangwooRhee如果您在本地使用docker compose的敏感凭据,那么对于那些不太熟悉YAML的人来说,您会遇到与技术无关的问题:请参阅“合并密钥语言”在YAML中,关于表示法==>environment:@logicOnAbstractions的原因,我到扩展字段文档的链接就足够了,对于那些不太熟悉YAML的人,YAML特性将进行解释:请参阅“合并键语言”在YAML中,关于表示法==>environment:@logicOnAbstractions的原因,我到扩展字段文档的链接就足够了,这里解释了YAML特性