在CLI中使用多个Docker Compose配置文件时,是否需要指定所有命令运行?

时间:2015-12-08 04:19:37

标签: docker docker-compose

将Docker Compose与多个配置文件(例如to allow multiple environments to share a common configuration file)一起使用时,我无法确定CLI中的所有命令是否需要提及所有配置文件。

例如,我有 docker.compose.yml docker.compose.dev.yml ,我就这样启动了我的开发环境:

docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d

如果我想在服务上运行命令,我可以使用:

docker-compose web ls

或者我可以使用:

docker-compose -f docker-compose.yml -f docker-compose.dev.yml run ls

这两个命令都有效,所以我不确定配置文件是否在构建后与容器相关联。

1 个答案:

答案 0 :(得分:1)

据我所知,如果您希望在运行docker-compose CLI命令时应用覆盖配置文件,则需要指定所有配置文件。

这可能并不总是很明显:问题中提供的示例(docker-compose web lsdocker-compose -f docker-compose.yml -f docker-compose.dev.yml run ls 可能 都运行没有错误(实际上取决于您正在运行的命令, docker-compose.dev.yml 中的所有设置都不会应用。

以下是一个可能出现问题的示例:

  1. 假设 docker-compose.yml 将所有设置默认为生产环境,其中 docker-compose.dev.yml 将这些设置设置为某些安全开发设置(这是一个糟糕的环境设置,但也许其他设置会有类似的问题)
  2. 假设web是一个Django应用程序,它使用django-storages在CDN上存储静态文件;
  3. 运行docker-compose run web python manage.py collectstatic时,文件将上传到生产地址,从而可能导致意外的生产更改。
  4. 考虑到所有这些,我建议将 docker-compose.yml 重命名为 docker-compose.base.yml ,因此运行docker-compose run web python manage.py collectstatic会关于 docker-compose.yml 缺失的错误。

    备用设置注意事项:多个环境的备用设置,如引用的Compose文档中所述,是在docker文件中使用extends关键字。 Rackspace开发了一个示例项目available on Github,它提供了使用此功能的一个很好的例子。