docker - 一次运行多个 docker-compose 覆盖
问题描述
我有一个docker-compose.yml
为两个环境设置的文件,dev
并且prod
:
码头工人-compose.yml
包含两个环境的共享配置
version: '3.1'
services:
homeassistant:
restart: unless-stopped
privileged: true
network_mode: host
docker-compose.dev.yml
包含开发环境的配置
version: '3.1'
services:
homeassistant:
image: registry.gitlab.com/addisonlynch/homeassistant/hass:dev
container_name: hass-dev
码头工人-compose.prod.yml
包含生产环境的配置
version: '3.1'
services:
homeassistant:
image: registry.gitlab.com/addisonlynch/homeassistant/hass:prod
container_name: hass-prod
我可以按如下方式运行开发环境:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
和产品环境:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
两种环境都可以完美运行,但是我只能同时运行一个。如果我在 dev 运行时(在同一主机上)尝试启动 prod,则 dev 容器将退出并且 prod 容器将启动(有效地替换它们)。如何同时运行两个环境?
解决方案
如果你这样做docker-compose --help
,你会看到:
-p, --project-name NAME Specify an alternate project name
(default: directory name)
这意味着,默认情况下,当您这样做时docker-compose up
,Compose 将您的服务作为项目的一部分进行管理,该项目以文件所在的目录名称命名docker-compose.yml
。由于您的 dev & prod compose 文件位于同一目录中并且具有相同的服务名称,因此 Compose 无法区分一个与另一个。
考虑到这一点,为了同时运行 dev 和 prod 环境,您需要通过以下方式指定项目名称-p
或--project-name
标志:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml -p dev_env up
另一种选择是使用COMPOSE_PROJECT_NAME
环境变量,如:
COMPOSE_PROJECT_NAME=dev_env docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
host
如果 dev 和 prod 都使用相同的端口,则您的情况下的潜在问题可能是网络模式。在这种情况下,您第二个启动的将无法启动。
推荐阅读
- java - 管道中不尊重 Micronaut @Requires 注释
- node.js - 在经过身份验证的 Google 帐户下获取“Google 我的商家”帐户时出现未经授权的错误
- javascript - Moment js time zone date conversion issue
- flask - Flask app AttributeError: 'function' object has no attribute 'post'
- android - Android - Seekbar - Customize seekbar UI
- python - How to sort objects and attributes by date?
- openstack - Why Overview volume's usage different Real Volume Usage?
- socket.io - Socket.io keeps sending message to all client even client that has not joined room
- c# - Merge 3 lists using LINQ
- spring - Spring Boot / Spring AOP:AutoProxyRegistrar.class 无法打开,因为它不存在