【问题标题】:Running multiple docker-compose overrides at once一次运行多个 docker-compose 覆盖
【发布时间】:2020-03-22 08:32:39
【问题描述】:

我有一个docker-compose.yml 文件,它为devprod 两个环境设置:

docker-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

docker-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 文件吗?也许你有一些类似的端口或其他东西重叠

标签: docker docker-compose


【解决方案1】:

如果你这样做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

如果 dev 和 prod 都使用相同的端口,则您的情况可能是 host 网络模式。那样的话,你第二个开始的就不能开始了。

【讨论】:

    【解决方案2】:

    正如提到的here,您可以使用-p 选项来设置容器的项目名称,并使用不同的容器前缀名称多次运行它。

    docker-compose -p dev

    docker-compose -p prod

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多