我在子目录中有docker文件和.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放在不同的路径中,因为build只能在上下文中工作。我很困惑。
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。不是吗?
发布于 2018-12-27 21:39:01
您有两个Dockerfiles,它们有各自的上下文。在每个上下文(文件夹)中都有.dockerignore,这是正确的。但是.dockerignore 不能在构建上下文之外工作,这意味着使用../../是错误的。
我猜你假设这些文件适用于docker文件夹,但实际上它们分别适用于docker/app和docker/web。
构建过程如下:
首先,docker cli打包上下文(如果未显式指定,则包含Dockerfile的文件夹)并将其发送到docker daemon。Nothing 此文件夹之外的内容将被发送。专为COPY命令编写,用于将上下文项放入容器中:
src路径必须在构建的上下文中;您不能复制../ /something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程。
如果存在.dockerignore,则在打包之前将忽略的文件排除为。
发布于 2019-05-29 12:17:35
上下文需要位于您在docker-compose.yml中指定的根目录/ .dockerignore文件夹中
发布于 2021-11-28 14:02:36
对我来说起作用的是把docker-compose.yml放在应用程序的根目录下。
https://stackoverflow.com/questions/53945934
复制相似问题