dockerignore 的 docker-compose 命名空间

Sum*_*ron 1 docker dockerfile docker-compose

docker-compose版本信息:

docker-compose version 1.24.1, build 4667896b
docker-py version: 3.7.3
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j  20 Nov 2018
Run Code Online (Sandbox Code Playgroud)

我有几个按以下约定命名的 Dockerfile 和 docker-compose 文件

Dockerfile.a
Dockerfile.b
Dockerfile.c
docker-compose.x.dev.yml
docker-compose.x.prod.yml
docker-compose.y.dev.yml
docker-compose.y.prod.yml
Run Code Online (Sandbox Code Playgroud)

哪里docker-compose.x.prod.yml可能看起来像

version: '3'

services:
  a:
    image: service_a
    container_name: cont_a
    build:
      context: .
      dockerfile: ./Dockerfile.a
  b:
    image: service_b
    container_name: cont_b
    build:
      context: .
      dockerfile: ./Dockerfile.b

Run Code Online (Sandbox Code Playgroud)

我可能会打以下电话

docker-compose -f docker-compose.x.prod.yml -f docker-compose.x.dev.yml build
Run Code Online (Sandbox Code Playgroud)

我应该如何命名我的 dockerignore 文件?我需要以下哪一项?

Dockerfile.a.dockerignore
docker-compose.x.dockerignore
docker-compose.x.prod.dockerignore
docker-compose.x.dev.dockerignore
Run Code Online (Sandbox Code Playgroud)

Dav*_*aze 5

如果您不使用较新的 BuildKit 后端,则该.dockerignore文件必须位于该context:目录中,并且必须准确命名为.dockerignore. docker-composedocker build都无法为其提供备用名称。在您的示例中,两个服务将始终使用相同的文件。build:.dockerignore

这意味着任一服务所需的任何文件都无法在该.dockerignore文件中列出。在实践中,这可能意味着您也不想盲目地COPY .进入图像,因为这将包含大量单个图像不需要的内容;你需要对你所COPY从事的事情更加有选择性。

BuildKit 在 Docker 中已经可用一段时间了,并且在许多安装中默认启用。如果您至少有 Docker 19.03,BuildKit 后端确实提供了执行此操作的路径;有关详细信息,请参阅@ChrisJohnson 的答案