可以在本地访问文件但不能在docker中访问文件的原因是什么?

时间:2018-07-09 21:38:10

标签: python docker flask

我正在尝试在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"]

1 个答案:

答案 0 :(得分:1)

请原谅我是否正在进行某些烧瓶特定的目录魔术,但是我认为这与运行python解释器的位置有关。

我猜您在本地测试时从python server.py目录运行了web。如果尝试从包含python foo/web/server.py的目录中运行Dockerfile,则将得到与上面发布的错误相同的错误。

因此,在Dockerfile中,尝试将WORKDIR设置为Web目录。 当然,RUNCMDls行也会发生变化。

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"]

祝你好运!

橄榄