Ser*_*nov 39 docker docker-compose
是否可以重用多个容器之间共享的环境变量以避免重复,如下例所示:
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
Run Code Online (Sandbox Code Playgroud)
Wol*_*hin 55
该extends
选项可能很好,但在撰写文件中不支持3.x
.其他方法是:
扩展字段(撰写文件3.4+)
如果您可以使用3.4+撰写文件,扩展字段可能是最佳选择:
泊坞窗,compose.yml
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'
Run Code Online (Sandbox Code Playgroud)env_file指令
泊坞窗,compose.yml
version: '3.2'
services:
some_service:
image: someimage
env_file:
- 'variables.env'
another_service:
image: anotherimage
env_file:
- 'variables.env'
Run Code Online (Sandbox Code Playgroud)
variables.env
VARIABLE=some_value
ANOTHER_VARIABLE=another_value
Run Code Online (Sandbox Code Playgroud)项目根目录中的.env 文件(或实际撰写环境中的变量)
来自.env文件的变量可以在服务配置中引用:
泊坞窗,compose.yml
version: '3.2'
services:
some_service:
image: someimage
environment:
- VARIABLE
another_service:
image: anotherimage
environment:
- VARIABLE
- ANOTHER_VARIABLE
Run Code Online (Sandbox Code Playgroud)
.ENV
VARIABLE=some_value
ANOTHER_VARIABLE=another_value
Run Code Online (Sandbox Code Playgroud)lar*_*sks 26
您可以使用extends指令让多个容器environment
从底层服务描述继承配置.例如,将以下内容放在名为的文件中base.yml
:
version: '2'
services:
base:
environment:
DB_URL: https://db:8443
DB_USER_NAME: admin
DB_USER_PASSWORD: admin
Run Code Online (Sandbox Code Playgroud)
然后在你的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
Run Code Online (Sandbox Code Playgroud)
然后在里面container1
,你会看到:
DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
Run Code Online (Sandbox Code Playgroud)
在container2
你内心会看到:
DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
ANOTHERVAR=this is a test
Run Code Online (Sandbox Code Playgroud)
显然extends
,您可以使用environment
指令以外的其他内容; 使用docker-compose时,这是避免重复的好方法.
您可以从 docker-compose 文件中引用本地环境变量。假设您想要做的是USER_NAME
与以下内容相同DB_USER_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}
Run Code Online (Sandbox Code Playgroud)
然后,像这样运行 docker-compose:
$ USERNAME="admin" PASSWORD="admin" docker-compose up
Run Code Online (Sandbox Code Playgroud)
或者,对于更持久且更易于重复输入的内容:
$ printf '%s\n%s\n' 'export USERNAME="admin"' 'export PASSWORD="admin"' >> ~/.bash_profile
$ source ~/.bash_profile
$ docker-compose up
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16515 次 |
最近记录: |