我在子目录中有带有dockerfiles和.dockerignore文件的docker-compose的小配置。我什至无法理解为什么即使在.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应用程序和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个Dockerfiles
,它们具有各自的上下文。在每个上下文(文件夹)中,您都有.dockerignore
,这是正确的。但是.dockerignore
不能在构建上下文之外使用,这意味着使用../../
是错误的。
我猜您假设这些文件适用于docker
文件夹,但实际上它们分别适用于docker/app
和docker/web
。
构建过程如下:
首先docker cli
打包上下文(如果未明确指定,则使用Dockerfile
文件夹)并将其发送到docker daemon
。 以外的任何都不会发送此文件夹。它是为COPY
命令显式编写的,该命令用于将上下文项放入容器中:
如果存在.dockerignore
,则打包前将忽略的文件排除在外。