如何在docker-compose中运行同一构建的多个版本?

4

TL/DR: 我能在docker-compose的environment指令中使用.env文件变量吗?


我有一个Dockerfile,它使用ARG变量基于环境变量来复制文件。

在我的docker-compose中,我想运行两个版本的此容器,具有不同的配置。

是否有一种方法可以在单个.env文件中设置不同的文件路径并建立两次,就像下面的例子一样?

还是有更聪明的方法来完成这个任务?


/
/.env
/docker-compose.yml
/app
/app/Dockerfile
/version1/data
/version2/data

/.env


VERSION_1_PATH=./version1/data
VERSION_2_PATH=./version2/data

/app/Dockerfile

FROM node:latest

ARG APP_PATH             # pull this environment variable
COPY $APP_PATH /var/app/ # use it to copy source to the same generic destination

/docker-compose.yml

version: "3"
services:
  version1:
    build: ./app
    container_name: version1
    env_file: 
      - '.env'
    environment:
      APP_PATH: ${VERSION_1_PATH}

  version2:
    build: ./app
    container_name: version2
    env_file: 
      - '.env'
    environment:
      APP_PATH: ${VERSION_2_PATH}

这个设置是构建时选项(类似于使用不同包含库的./configure标志),还是运行时配置? - David Maze
1个回答

2
您可以在定义构建时的compose文件中添加args,如下所示:
version: '3'
services:
  version1:
    build:
      context: ./app
      args:
        - APP_PATH=${VERSION_1_PATH}

  version2:
    build:
      context: ./app
      args:
        - APP_PATH=${VERSION_2_PATH}

不需要在“env_file”中定义“.env”,如果只想在构建过程中使用它,因为“.env”可以默认用于“docker-compose.yml”。而“environment”也不是用于“build”,而是用于“运行容器”。
一个示例,供您参考。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接