考虑以下典型的python项目结构:
fooproject
- main.py
- src/
- test/
- logs/
- Dockerfile
- .dockerignore
- README.md.dockerfile应该防止test/和logs/目录包含在停靠器映像中。
test/
logs/Dockerfile的内容如下
FROM ubuntu16.04
COPY . /app/
WORKDIR /app
USER root
RUN pip install -r requirements.txt
ENTRYPOINT ["main.py"]但是,当运行PyCharm的自动对接器集成时,test和logs目录都被复制到容器中。PyCharm run命令以如下方式结束:
7eb643d9785b:python -u /opt/project/main.py 我尝试了一些没有效果的东西,比如在应用程序的其他部分的目录下复制.dockerignore。例如:
COPY . /app/
COPY .dockerignore .dockerignore
WORKDIR /app想知道PyCharm的/opt/project是否会有某种干扰吗?那么, .dockerignore到底应该在这样的项目中处于什么位置呢?
更新
我将docker container inspect的输出与BMitch共享,他找到了解决方案。PyCharm在运行配置的容器设置中自动挂载卷。

发布于 2020-03-17 15:28:50
.dockerignore用于控制构建上下文中包含的文件。这会影响Dockerfile中的COPY和ADD命令,以及最终产生的映像。当您使用卷挂载运行该映像时,例如:
{
"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。
https://stackoverflow.com/questions/60713751
复制相似问题