Evg*_*eny 3 docker docker-compose
我在子目录中有带有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 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"]
Run Code Online (Sandbox Code Playgroud)
所以我认为COPY . .首先检查.dockerignore ..不?
the*_*pan 21
我一直在努力解决这个问题,直到我看到这篇文章,它帮助我了解了我的案例中发生的事情。如果您将所有内容绑定到容器,例如.:/app,或者.:/usr/src/app在热重载的开发过程中很常见,我们将完全忽略.dockerignore,因为绑定安装是在构建映像后附加的,甚至被忽略的文件现在也安装到容器中。我删除了绑定,并且.dockerignore忽略了指定的文件。
我仍然在开发过程中绑定所有内容,但是在构建生产映像时,我不会
您有2个Dockerfiles,它们有各自的上下文。在每个上下文(文件夹)中都有.dockerignore,这是正确的。但是在构建上下文之外.dockerignore 无法使用,这意味着使用../../是错误的。
我猜您假设这些文件适用于docker文件夹,但实际上它们分别适用于docker/app和docker/web。
构建过程如下:
首先docker cli打包上下文(Dockerfile如果未明确指定,则带有文件夹),并将其发送给docker daemon。此文件夹之外的任何内容均不会发送。它是为COPY命令显式编写的,用于将上下文项放入容器中:
该
src路径必须构建的上下文中; 您无法复制../something / something,因为Docker构建的第一步是将上下文目录(和子目录)发送到docker守护程序。
如果存在.dockerignore,则打包之前将排除被忽略的文件。
| 归档时间: |
|
| 查看次数: |
6239 次 |
| 最近记录: |