用docker-compose.prod.yml覆盖dockercompose.yml

时间:2019-03-17 13:18:50

标签: docker docker-compose

我希望这是一个简单的方法,并且会帮助更多的人,因为我找不到直接的答案。

我正在关注以下示例: https://docs.docker.com/compose/extends/#different-environments

我有两个文件:

Docker进行开发

version: '3.7'

services:
  restapi:
    build: "./something/"
  db:
    image: postgres:10.5-alpine
volumes:
  postgres_data:
  static_volume:

Docker用于生产(docker.compose.prod.yml):

version: '3.7'

services:
  restapi:
    image: registry.gitlab.com/...
    restart: always
  db:
    restart: always

我说的docker文档:

  

对于构建和映像,使用Compose的版本1时   文件格式,在本地服务中使用一个选项会导致Compose   如果其他选项是在原始服务中定义的,则将其丢弃。

但是,当我尝试在服务器上运行docker-compose时,我失败了,因为构建路径不存在,这意味着该条目未被覆盖。 出了什么问题?

此命令失败:

sudo docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

使用:

build path /.../.../.../.../... either does not exist, is not accessible, or is not a valid URL.

1 个答案:

答案 0 :(得分:1)

您可以指定多个docker-compose配置文件,它们将从右到左相互覆盖。

在以下示例中,prod.yml将覆盖dev.yml。

docker-compose -f /path/to/docker-compose-a.yml -f /path/to/docker-compose-b.yml up.

为解决您的问题,我将执行以下操作。

创建3个.yml文件,

  • common-将是两种环境的基础。
  • 产品-仅适用于产品
  • dev-仅将是dev(将保留构建路径)

然后运行开发人员环境:(common.yml + dev.yml)

docker-compose -f /path/to/docker-compose-common.yml -f /path/to/docker-compose-dev.yml up.

和生产(common.yml + prod.yml):

docker-compose -f /path/to/docker-compose-common.yml -f /path/to/docker-compose-prod.yml up.