Ada*_*hes 6 python pycharm docker
考虑以下典型的python
项目结构:
fooproject
- main.py
- src/
- test/
- logs/
- Dockerfile
- .dockerignore
- README.md
Run Code Online (Sandbox Code Playgroud)
该.dockerfile应防止test/
和logs/
被包含在泊坞窗图像中的目录。
test/
logs/
Run Code Online (Sandbox Code Playgroud)
的内容Dockerfile
是
FROM ubuntu16.04
COPY . /app/
WORKDIR /app
USER root
RUN pip install -r requirements.txt
ENTRYPOINT ["main.py"]
Run Code Online (Sandbox Code Playgroud)
但是,当通过 PyCharm 的自动 docker 集成运行时,test
和logs
目录都被复制到容器中。PyCharm 运行命令的结果如下:
7eb643d9785b:python -u /opt/project/main.py
Run Code Online (Sandbox Code Playgroud)
我尝试了一些无济于事的方法,例如.dockerignore
在应用程序其余部分上方的目录中制作副本。例如:
COPY . /app/
COPY .dockerignore .dockerignore
WORKDIR /app
Run Code Online (Sandbox Code Playgroud)
想知道 PyCharm 是否有可能/opt/project
以某种方式进行干扰?那么.dockerignore 在这样的项目中究竟应该放在什么位置?
我docker container inspect
与 BMitch分享了 的输出,他能够找到解决方案。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"
},
Run Code Online (Sandbox Code Playgroud)
该卷挂载会覆盖该容器的映像内容。对路径的所有访问都将转到您的桌面目录而不是图像内容,并且 Linux 绑定挂载没有.dockerignore
文件的概念。
当您在没有卷挂载的情况下运行此映像时,您应该会看到不同的行为。
对于将来遇到此问题的任何人,都.dockerignore
需要在构建上下文的根中。构建上下文是您在构建命令末尾传递的目录,通常是 a.
或当前目录。如果您启用 BuildKit,它将首先检查Dockerfile.dockerignore
您的 Dockerfile 路径/名称可以更改的位置。并测试您的.dockerignore
,请参阅此答案。
归档时间: |
|
查看次数: |
4186 次 |
最近记录: |