我正在努力为应用程序容器提供特定于环境的配置(比如dev/qa/prod)。离我的目标最近的就是这个docker-compose.yml
version: '2'
services:
app:
image: my-application:latest
tty: true
volumes_from:
- configs:ro
configs:
image: my-configs:latest
tty: true
volumes:
- /configs/$ENV比方说,如果我们在QA环境中部署,相关的配置将可以在/configs/qa (从app服务中)访问,这意味着为了访问这些配置,应用程序必须知道它运行的环境,我认为这不是应用程序开发人员应该关心的事情。
因此,我的目标是让config的/configs/$ENV像/configs一样从app服务中访问。我该如何实现这一目标?我目前的想法是重建config的形象:
FROM my-configs:latest
ARG env
RUN cp -rf /configs/$env /tmp/configs && rm -rf /configs && cp -rf /tmp/configs /configs
ENTRYPOINT /bin/sh然后,更新后的docker-compose.yml将如下所示:
version: '2'
services:
app:
image: my-application:latest
tty: true
volumes_from:
- configs:ro
configs:
build:
context: .
args:
env: $ENV
tty: true
volumes:
- /configs有没有更好的选择,或者我应该坚持我的想法?
发布于 2019-09-17 19:47:45
您可以在volumes:规范中直接使用环境变量
volumes:
- /config/$ENV:/config我会把它放在实际使用它的服务定义中。你不需要把它放到它自己的图像中。我也倾向于避免使用volumes_from:,更倾向于明确说明实际挂载的是哪些卷。
version: '3'
services:
app:
image: my-application:latest
volumes:
- /config/$ENV:/confighttps://stackoverflow.com/questions/57973118
复制相似问题