Docker-compose和.dockerignore

时间:2018-12-27 13:31:42

标签: docker docker-compose

我在子目录中有一些docker-compose的小配置,其中包含Dockerfiles和.dockerignore文件。我什至无法理解为什么构建后的映像包含所有内容,即使我在.dockerignore中有一些要忽略的项目也是如此。这就是我的

docker-compose.yml docker ├── app │ ├── Dockerfile │ └── .dockerignore └── web ├── Dockerfile ├── nginx.conf └── .dockerignore

.dockerignore的示例:

**/.dockerignore docker-compose.yml log **/log ../../log

我只是按如下方式运行:

docker-compose up -d --build --no-cache

以上所有内容都没有被忽略。.我在做什么错了?

docker-compose version 1.23.2, build 1110ad01

为应用程序服务添加Dockerfile(请参阅docker-compose)。 Docker-compose将两个图像与ROR app和nginx打包在一起。对于这两个dockerfile,我都有dockerignore。所以我的理解是,我可以说出我每个人到底想要什么。但事实并非如此。如何忽略软件包中的某些文件?还是应该将Dockerfile和dockerignore放在不同的路径中,因为构建仅在上下文中起作用。

FROM ruby:2.4.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs imagemagick
# Configuring main directory
RUN mkdir -p /var/www/example.com
WORKDIR /var/www/example.com
# Setting env up
ENV RAILS_ENV='production'
ENV RACK_ENV='production'

# Adding gems
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install --jobs 20 --retry 5 --without development test
# Adding project files
COPY . .

EXPOSE 3000
CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]

所以我认为COPY . .首先检查.dockerignore。.不?

2 个答案:

答案 0 :(得分:4)

您有2个Dockerfiles,它们具有各自的上下文。在每个上下文(文件夹)中,您都有.dockerignore,这是正确的。但是.dockerignore 不能在构建上下文之外工作,这意味着使用../../是错误的。

我想您是假设这些文件适用于docker文件夹,但实际上它们分别适用于docker/appdocker/web

构建过程如下:

第一个docker cli打包上下文(如果未明确指定,则使用Dockerfile文件夹)并将其发送到docker daemon。此文件夹外部没有任何内容发送。它是为COPY命令显式编写的,该命令用于将上下文项放入容器中:

  

src路径必须在构建上下文中;你不能   COPY ../something / something,因为Docker构建的第一步   是将上下文目录(和子目录)发送到docker   守护程序。

如果有.dockerignore,则打包前会排除被忽略的文件

答案 1 :(得分:0)

.dockerignore必须位于docker-compose.yml中指定的根目录/上下文文件夹中