首页 > 解决方案 > 条件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中简单地访问。我怎样才能做到这一点?我目前的想法是重建的形象:/configsappconfig

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

有没有更好的选择,或者我应该接受我的想法吗?

标签: dockerdocker-compose

解决方案


可以直接使用volumes:规范中的环境变量

volumes:
  - /config/$ENV:/config

我会把它放在实际使用它的服务定义中。你不需要把它放到它自己的图像中。我也倾向于避免volumes_from:明确说明实际安装了哪些卷。

version: '3'
services:
  app:
    image: my-application:latest
    volumes:
      - /config/$ENV:/config

推荐阅读