我有如下所示的docker-compose.yml:
version: '2'
services:
micro-service:
image: some/micro-service:${SERVICE_VERSION}
env_file:
- ../all-variables/${PROFILE}/micro_service.env
ports:
- "8085:8085"
我有两个文件:dev.env
和stage.env
,其中描述了SERVICE_VERSION
和PROFILE
。
运行docker-compose up
时有什么方法可以指定具体文件
默认情况下,docker-compose从当前目录获取.env
文件。
是否有方法可以覆盖它或其他解决方法?
答案 0 :(得分:1)
正如评论中答案中所提到的,由于将其直接编码到源code中以使用.env
,因此无法做到这一点。
但是,有两种方法可以得到类似的行为。
第一种方法与docker-compose
本机一起使用,这将使用docker-compose override文件。
因此,在您的情况下,您可以像这样创建基本docker-compose.yml
文件:
version: '2'
services:
micro-service:
image: some/micro-service:1.0.0
ports:
- "8085:8085"
然后您可以定义一个docker-compose-dev.yml
文件:
version: '2'
services:
micro-service:
image: some/micro-service:dev
env_file:
- ../all-variables/dev/micro_service.env
然后您可以运行以下命令
$ docker-compose up -f docker-compose.yml -f docker-compose-dev.yml up
如果执行此操作,则docker-compose-dev.yml
中的值将覆盖docker-compose.yml
中的值。因此,它将使用some/micro-service:1.0.0
中定义的图像来代替使用图像docker-compose-dev.yml
。
第二种方法是使用docker-app。这是Docker团队的新实验实用程序。
基本上,您将创建一个如下所示的dockerapp
文件:
version: 0.0.1
name: app
---
version: '2'
services:
micro-service:
image: some/micro-service:${SERVICE_VERSION}
env_file:
- ../all-variables/${PROFILE}/micro_service.env
ports:
- "8085:8085"
---
SERVICE_VERSION: latest
PROFILE: default
然后,如果将.env
文件转换为.yml
,则使用docker-app
用正确的变量渲染组成文件。
docker-app render -f dev.yml | docker-compose -f - up
希望这会有所帮助,当使用docker-compose处理多个环境时,我也会遇到类似的问题。