docker - 条件volumes_from路径
问题描述
我正在努力为应用程序容器提供特定于环境的配置(比如 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
有没有更好的选择,或者我应该接受我的想法吗?
解决方案
可以直接使用volumes:
规范中的环境变量
volumes:
- /config/$ENV:/config
我会把它放在实际使用它的服务定义中。你不需要把它放到它自己的图像中。我也倾向于避免volumes_from:
明确说明实际安装了哪些卷。
version: '3'
services:
app:
image: my-application:latest
volumes:
- /config/$ENV:/config
推荐阅读
- elasticsearch - 如何获得 Elasticsearch.NET / NEST 中错误的“真正”根本原因?
- java - 神秘的 java.lang.RuntimeException:在 android.os.PowerManager$WakeLock.acquireLocked (PowerManager.java:2212)
- python-3.x - 在方法python类中调用函数
- c++ - OpenGL 在 Z 缓冲区和深度测试方面遇到问题
- python - 将 LXML 与 Html、Requests 和 ETree 一起使用,除了文本之外,它还提供了所有 HTML 标签,我不知道为什么
- keras - 在 fit_generator 中, training_generator 受 validation_generator 影响
- web-services - 如果我和互联网之间有两个路由器,我还可以进行端口转发以公开我的本地网站吗?
- php - PHP 警告:非法字符串偏移 'all'
- ibm-watson - Watson Unity SDK 突然停止工作
- nlp - 创建词嵌入而不在存储库中保留 fastText Vector 文件