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

用docker-compose.prod.yml覆盖dockercompose.yml,docker,docker-compose,Docker,Docker Compose,我希望这是一个简单的问题,并将帮助更多的人,因为我无法找到一个直接的答案 我举这个例子: 我有两个文件: Docker compose for development Docker compose for production Docker.compose.prod.yml: docker-compose -f /path/to/docker-compose-common.yml -f /path/to/docker-compose-prod.yml up. 我看到docker文档,上面写着

我希望这是一个简单的问题,并将帮助更多的人,因为我无法找到一个直接的答案

我举这个例子:

我有两个文件:

Docker compose for development

Docker compose for production Docker.compose.prod.yml:

docker-compose -f /path/to/docker-compose-common.yml -f /path/to/docker-compose-prod.yml up.
我看到docker文档,上面写着:

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

然而,当我尝试在我的服务器上运行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.
您可以指定多个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文件

通用-将是这两种环境的基础。 prod-将仅为prod dev-将是dev-only将保留构建路径 然后运行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.

我在看到问题后编辑了答案。当使用撰写文件格式的版本1时。。。您使用的是3.7版,因此此声明不适用于您的情况嘿,谢谢您的回答。但除了三个文件中的分离,这正是我正在做的。我不知道这如何解决docker试图访问映像上的构建路径的问题,这是我的问题。还有一个技巧是创建一个名为docker-compose.override.yml的符号链接,该链接以docker-compose.prod.yml为目标。这样,您就可以只使用docker compose命令,而不必使用-foption@Xen_mar第三个文件起了很大的作用。问题是dev.yml中指定的生成路径在生产环境中不存在,因此您希望它只存在于dev.yml文件中,而不存在于公共和生产环境中,这将防止问题发生。
docker-compose -f /path/to/docker-compose-common.yml -f /path/to/docker-compose-prod.yml up.