docker-compose覆盖应用程序属性
问题描述:
有一个Spring Boot应用程序,我们使用application.yml文件来存储属性。我得到了一个任务,让用户可以在启动应用程序时覆盖某些属性。考虑到我们已经对我们的应用程序docker-compose文件进行了docker化,我认为这是非常正确的地方。我发现了一个选项,它的实际工作,env_file:docker-compose覆盖应用程序属性
backend:
build:
context: backend
dockerfile: Dockerfile.backend
restart: always
ports:
- 3000:3000
env_file:
- backend/custom.env
volumes:
- ../m2_repo:/root/.m2/
- ../{APP_NAME}/data_sources:/backend/data_sources/
links:
- database
networks:
main:
aliases:
- backend
这完美地解决了我的任务,所有的键值对覆盖现有的application.yml性能。但是,我有2个问题:
看来,在我的搬运工,撰写文件中有多个服务,我需要指定不同的服务,这可能不是很方便单独env_file。是否有可能为整个docker-compose文件创建一个共同的env_file?
我知道,对于docker-compose运行命令,有一个选项-e,我可以把env变量的key = value对。码头工人有没有类似的选择?我的意思是为了不使用env_file。
答
广告1:这是不可能的。我也相信这是故意的 - 让开发人员定义什么容器可以访问什么数据。广告2:不能,您无法使用运行参数up
命令docker-compose
(运行docker-compose help up
以查看可用运行时参数)提供变量。但是你可以从撰写文件中定义这些使用environment
条款,如:
restart: always
ports:
- 3000:3000
env_file:
- backend/custom.env
environment:
- DB_PASSWORD # <= #1
- APP_ENV=production # <= #2
即。
- 要么只是一个名称的环境变量的 - 它的值,然后从主机
- 或全部定义带到创建一个新的容器
请参阅docs上的environment
条款以获得更多的说明。
为了覆盖某些设置,您可以做的另一件事是使用“父”文件组合文件extend
。 Docs on extends
clause
遗憾的是,截至目前,使用第3版撰写文件时extends
将无法正常工作,但它在这个github issue正在讨论,所以希望它也将很快面市:)
为什么1)中的问题?你所有的服务都需要相同的属性吗?如果使用一个常见的env_file,是否没有重叠? –
这不是问题,而是我正在寻找一个选项。我的属性不重叠,这实际上是我考虑有一个env_file而不是多个文件(每个服务一个) – Viacheslav