我正在使用 docker compose 3.3 版并想使用环境变量来定义卷名称。我看了一个相关的问题,但这似乎已经很老了。3.2 支持长语法,有没有办法实现?这是我在 docker compose 文件中尝试的内容:
version: '3.3'
services:
target:
image: "my-registry/my-image:${IMAGE_TAG}"
volumes:
- type: volume
source: ${VOLUME_NAME}
target: /data
ports:
- "${TOMCAT_PORT}:8080"
volumes:
${VOLUME_NAME}:
Run Code Online (Sandbox Code Playgroud)
显然,此语法不起作用,因为卷名未在键中替换并引发以下错误:
卷值不允许附加属性(“${VOLUME_NAME}”是意外的)
任何帮助都感激不尽。
ISt*_*ger 25
如果想避免不同项目之间的冲突,只需要--project-name "your_project_name"为docker-compose指定即可。它为所有服务和卷添加命名空间。
例如,您可以docker-compose.yml在几个项目中使用相同的方法:
volumes:
dbdata_mysql:
services:
mysql_db:
image: mysql:5.7
volumes:
- "dbdata_mysql:/var/lib/mysql"
Run Code Online (Sandbox Code Playgroud)
如果你开始你的项目:
docker-compose --project-name "first_project" up -d
docker-compose --project-name "second_project" up -d
Run Code Online (Sandbox Code Playgroud)
它将创建命名空间卷:
$ docker volume ls | grep dbdata_mysql
local first_project_dbdata_mysql
local second_project_dbdata_mysql
Run Code Online (Sandbox Code Playgroud)
小智 12
这是预期的行为 - Compose 只对值进行变量插值,而不是键。见这里。
在我的项目中,我使用外部结构:
version: '3.1'
services:
### Code from branch develop ###
applications:
image: registry.gitlab.lc:5000/develop/ed/develop.sources:latest
volumes:
- developcode:/var/www/develop
deploy:
replicas: 1
update_config:
parallelism: 1
delay: 5s
restart_policy:
condition: on-failure
placement:
constraints: [node.role == manager]
### PHP-FPM ###
php-fpm:
image: registry.gitlab.lc:5000/develop/ed/php-fpm-ed-sq:latest
volumes:
- developcode:/var/www/develop
expose:
- "9000"
deploy:
replicas: 2
update_config:
parallelism: 1
delay: 5s
restart_policy:
condition: on-failure
placement:
constraints: [node.role == manager]
logging:
driver: gelf
options:
gelf-address: "udp://${GRAYLOG_ADDR}:12201"
tag: "php-fpm"
### Nginx ###
nginx:
image: registry.gitlab.lc:5000/develop/ed/nginx-ed-sq:staging
volumes:
- developcode:/var/www/develop
ports:
- "80:80"
- "443:443"
deploy:
replicas: 2
update_config:
parallelism: 1
delay: 5s
restart_policy:
condition: on-failure
placement:
constraints: [node.role == manager]
### Volumes Setup ###
volumes:
developcode:
external:
name: code-${VER}
Run Code Online (Sandbox Code Playgroud)
但首先我需要手动创建外部卷,例如:
export VER=1.1 && docker volume create --name code-$VER
Run Code Online (Sandbox Code Playgroud)
您可以看到创建的卷:
docker volume ls
DRIVER VOLUME NAME
local code-1.0
local code-1.1
Run Code Online (Sandbox Code Playgroud)
之后,使用以下方法部署服务:
env $(cat .env | grep ^[A-Z] | xargs) docker stack deploy --with-registry-auth --compose-file docker-compose.yml MY_STACK
Run Code Online (Sandbox Code Playgroud)
这就是我在 .env 中完成案例的方法
# To use a code volume create the volume mapping an existing folder like this and pass the value of <volume_name> below
# docker volume create --driver local --opt type=none --opt device=<full_path_to_folder> --opt o=bind <volume_name>
PROJECT_VOLUME_CODE=myproject_code
Run Code Online (Sandbox Code Playgroud)
然后在 docker-compose.yml (版本 3.7)或更高版本的服务内
volumes:
- type: volume
source: code
target: /var/www/html
Run Code Online (Sandbox Code Playgroud)
外部
volumes:
code:
external: true
name: ${PROJECT_VOLUME_CODE}
Run Code Online (Sandbox Code Playgroud)
我设法通过以下语法使用环境变量:
volumes:
- "$HOME/.cache/composer:/tmp/composer_cache"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9615 次 |
| 最近记录: |