Docker compose:单个主机上具有可覆盖卷和端口的多个隔离环境

Docker compose:单个主机上具有可覆盖卷和端口的多个隔离环境,docker,docker-compose,Docker,Docker Compose,我们需要在一台主机上创建应用程序的多个独立环境,使用单个编写文件 我意识到,通过使用-p选项,我们可以在单个主机中使用docker compose创建多个独立的环境 但是,是否可以在不同环境下覆盖撰写文件中的端口:和卷:,而不使用两个单独的docker撰写文件 例如,我希望重写以下属性,最好是通过命令行参数 用于开发环境 ports: 8081:8080 volumes: /etc/myapp/dev/properties/:/etc/myapp/properties ports:

我们需要在一台主机上创建应用程序的多个独立环境,使用单个编写文件

我意识到,通过使用
-p
选项,我们可以在单个主机中使用docker compose创建多个独立的环境

但是,是否可以在不同环境下覆盖撰写文件中的
端口:
卷:
,而不使用两个单独的docker撰写文件

例如,我希望重写以下属性,最好是通过命令行参数

用于开发环境

ports:
 8081:8080

volumes:
 /etc/myapp/dev/properties/:/etc/myapp/properties 
ports:
 8082:8080

volumes:
 /etc/myapp/qa/properties/:/etc/myapp/properties 
用于QA环境

ports:
 8081:8080

volumes:
 /etc/myapp/dev/properties/:/etc/myapp/properties 
ports:
 8082:8080

volumes:
 /etc/myapp/qa/properties/:/etc/myapp/properties 

您可以使用template.yml并传递要生成docker-compose.yml的变量

首先,创建一个包含以下内容的
模板.yml

version: "2"
...
ports:
 "$HOST_PORT":8080

volumes:
 "$HOST_VOLUME":/etc/myapp/properties
现在,您可以使用环境所需的变量创建脚本。对于开发环境,它将如下所示:

#!/bin/bash

# Variables to use in template.yml
export HOST_PORT="8081"
export HOST_VOLUME="/etc/myapp/dev/properties/"

# build docker-compose.yml from the template
source env.sh; rm -rf docker-compose.yml; envsubst < "template.yml" > "docker-compose.yml";
#/bin/bash
#要在template.yml中使用的变量
导出主机\u端口=“8081”
export HOST_VOLUME=“/etc/myapp/dev/properties/”
#从模板构建docker-compose.yml
来源env.sh;rm-rf docker-compose.yml;envsubs<“template.yml”>“docker compose.yml”;
这将生成一个带有具体值的
docker compose.yml


这里有一个用法示例:

我认为可以使用env变量。在这里看到更多