python - 文件在本地可访问但在 docker 中不可访问的原因可能是什么?
问题描述
我正在尝试在 docker 中部署一个烧瓶应用程序,当我在执行本地 python server.py 时可以访问 default-config.yaml 文件,但在 docker 环境中呈现为不存在
文件夹的结构是
foo
├── __init__.py
├── config
│ └── default-config.yaml
└── web
├── __init__.py
│
└── server.py
在本地运行时,编译成功
使用时
docker run image
报错The file '<--MYPATH-->' does not exist
__main__.ConfigFileDoesNotExistException: The file '../config/default-config.yaml' does not exist
- 构建图像时,
ls '<--MYPATH-->'
显示文件在那里。
Step 4/9 : RUN ls ./foo/config
---> Running in 1e3096b9ccf0
default-config.yaml
PS我用过 ADD 。/code 和 WORKDIR /code
非常困惑为什么文件被解释为不存在。有什么提示吗?
谢谢
泊坞窗文件在下面
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN ls ./foo/config
RUN apk update && \
apk add --virtual build-deps gcc python-dev musl-dev && \
apk add postgresql-dev
RUN pip install psycopg2
RUN python3 setup.py install
RUN pip install -r requirements.txt
CMD ["python3", "./foo/web/server.py"]
解决方案
如果发生了一些特定于烧瓶的目录魔法,请原谅我,但我认为这是从哪里运行 python 解释器的问题。
我猜你是在本地测试时python server.py
从目录中运行的。web
如果您尝试python foo/web/server.py
从包含 的目录运行Dockerfile
,那么您会得到与上面发布的相同的错误。
因此,在 Dockerfile 中,尝试将 设置WORKDIR
为 web 目录。当然RUN
,CMD
和ls
行也会改变。
FROM python:3.4-alpine
ADD . /code
WORKDIR /code/foo/web
RUN ls ../config
RUN apk update && \
apk add --virtual build-deps gcc python-dev musl-dev && \
apk add postgresql-dev
RUN pip install psycopg2
RUN python3 ../../setup.py install
RUN pip install -r ../../requirements.txt
CMD ["python3", "server.py"]
编辑:
或者,WORKDIR
直接在该行之前使用第二个命令CMD
,这样所有内容都将与您发布的 Dockerfile 相同,除了最后两行是
WORKDIR /code/foo/web
CMD ["python3", "server.py"]
祝你好运!
奥利弗
推荐阅读
- c#-4.0 - C# 从另一个窗口单击鼠标时触发函数
- python - 在 OpenCV python 中将白色像素转换为黑色
- html - 标题为全宽但内容受到限制时的 CSS Grid
- python-3.x - 无法让 Softmax 在代码中工作
- ruby-on-rails - Rails 包含与条件的多个关联
- java - Spring Framework 中的 Redis 设置
- php - 在 php 中编辑配置文件错误
- javascript - 然后在执行所有异步调用之前执行函数
- javascript - 如何发送 JavaScript 数组并在另一个页面中使用 PHP 数组检索它?
- gridview - Flutter中如何用SingleChildScrollView和GridView实现连续滚动