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

标签 docker docker-compose

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

我有一个 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}

最佳答案

您可以添加 args在撰写文件中何时定义构建,如下所示:

version: '3'
services:
  version1:
    build:
      context: ./app
      args:
        - APP_PATH=${VERSION_1_PATH}

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

并且无需定义 .envenv_file如果只是想在构建中使用它作为 .env可以默认用于 docker-compose.yml .而且,environment也不适用于 build , 是为了 running container .

example , 供引用。

关于docker - 如何在 docker-compose 中运行同一构建的多个版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122097/

相关文章:

docker - 如何将目录从远程主机复制到docker镜像

Docker 容器在端口 80 上为不同的子域提供服务

nginx - docker compose oci 运行时错误,在 $PATH 中找不到可执行文件

wordpress - WordPress默认docker镜像如何将文件复制到主机系统中?

python - 在 Docker 中运行 python cronjob 时缺少环境变量

amazon-web-services - 在EC2重新启动时重新创建或保存docker-compose文件

docker - 如何在 CentOS7 中更改 docker daemon 根目录

docker - 从存储库中删除所有 Docker 镜像

node.js - 容器化时 NodeJS 应用程序停止工作 [容器中的 FTP 服务器]

node.js - 为什么 NodeJS 集群与 Docker 相比,Einhorn 又如何?