我正在尝试在docker中部署Flask应用程序,当我在执行本地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
P.S。我用过 添加。 / code和 WORKDIR / code
非常困惑为什么文件被解释为不存在。有提示吗?
谢谢
docker文件在下面
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"]
答案 0 :(得分:1)
请原谅我是否正在进行某些烧瓶特定的目录魔术,但是我认为这与运行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"]
祝你好运!
橄榄