首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把.dockerignore放在哪里?

把.dockerignore放在哪里?
EN

Stack Overflow用户
提问于 2020-03-16 21:59:08
回答 1查看 12.3K关注 0票数 12

考虑以下典型的python项目结构:

代码语言:javascript
复制
fooproject 
  - main.py
  - src/
  - test/
  - logs/
  - Dockerfile
  - .dockerignore
  - README.md

.dockerfile应该防止test/logs/目录包含在停靠器映像中。

代码语言:javascript
复制
test/
logs/

Dockerfile的内容如下

代码语言:javascript
复制
FROM ubuntu16.04

COPY . /app/
WORKDIR /app    
USER root    
RUN pip install -r requirements.txt    
ENTRYPOINT ["main.py"]

但是,当运行PyCharm的自动对接器集成时,testlogs目录都被复制到容器中。PyCharm run命令以如下方式结束:

代码语言:javascript
复制
7eb643d9785b:python -u /opt/project/main.py 

我尝试了一些没有效果的东西,比如在应用程序的其他部分的目录下复制.dockerignore。例如:

代码语言:javascript
复制
COPY . /app/
COPY .dockerignore .dockerignore
WORKDIR /app

想知道PyCharm的/opt/project是否会有某种干扰吗?那么, .dockerignore到底应该在这样的项目中处于什么位置呢?

更新

我将docker container inspect的输出与BMitch共享,他找到了解决方案。PyCharm在运行配置的容器设置中自动挂载卷。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-17 15:28:50

.dockerignore用于控制构建上下文中包含的文件。这会影响Dockerfile中的COPYADD命令,以及最终产生的映像。当您使用卷挂载运行该映像时,例如:

代码语言:javascript
复制
        {
            "Type": "bind",
            "Source": "/home/adam/Desktop/Dev/ec2-data-analysis/grimlock",
            "Destination": "/opt/project",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },

该卷挂载覆盖该容器的图像内容。对路径的所有访问都将转到您的桌面目录,而不是图像内容,Linux挂载没有.dockerignore文件的概念。

当您在没有卷挂载的情况下运行此映像时,应该会看到不同的行为。

对于将来遇到这个问题的人来说,.dockerignore需要成为构建上下文的根源。构建上下文是在build命令末尾传递的目录,通常是.或当前目录。如果您启用了BuildKit,它将在first check for a Dockerfile.dockerignore中更改您的Dockerfile路径/名称。要测试您的.dockerignore,请参阅this answer

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60713751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档