考虑以下典型的 python
项目结构:
fooproject
- main.py
- src/
- test/
- logs/
- Dockerfile
- .dockerignore
- README.md
.dockerfile 应该防止
test/
和 logs/
目录被包含在 docker 镜像中。test/
logs/
Dockerfile
的内容是FROM ubuntu16.04
COPY . /app/
WORKDIR /app
USER root
RUN pip install -r requirements.txt
ENTRYPOINT ["main.py"]
但是,当通过 PyCharm 的自动 docker 集成运行时,
test
和 logs
目录都被复制到容器中。 PyCharm 运行命令的结果如下:7eb643d9785b:python -u /opt/project/main.py
我尝试了一些无济于事的方法,例如在应用程序其余部分上方的目录中制作
.dockerignore
的副本。例如:COPY . /app/
COPY .dockerignore .dockerignore
WORKDIR /app
想知道 PyCharm 的
/opt/project
是否有可能以某种方式干扰?那么 在这样的项目中究竟应该在哪里 .dockerignore 呢? 更新
我与 BMitch 分享了
docker container inspect
的输出,他能够找到解决方案。 PyCharm 在容器设置运行配置中自动挂载一个卷最佳答案
.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 绑定(bind)挂载没有
.dockerignore
文件的概念。当您在没有卷挂载的情况下运行此镜像时,您应该会看到不同的行为。
对于将来遇到此问题的任何人,
.dockerignore
需要位于构建上下文的根目录中。构建上下文是您在构建命令结束时传递的目录,通常是 .
或当前目录。如果您启用 BuildKit,它将 first check for a Dockerfile.dockerignore
可以更改您的 Dockerfile 路径/名称。要测试您的 .dockerignore
,请参阅 this answer 。关于python - .dockerignore 放在哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60713751/