首页 > 解决方案 > 文件在本地可访问但在 docker 中不可访问的原因可能是什么?

问题描述

我正在尝试在 docker 中部署一个烧瓶应用程序,当我在执行本地 python server.py 时可以访问 default-config.yaml 文件,但在 docker 环境中呈现为不存在

文件夹的结构是

foo
├── __init__.py
├── config
│   └── default-config.yaml    
└── web
    ├── __init__.py
    │   
    └── server.py

__main__.ConfigFileDoesNotExistException: The file '../config/default-config.yaml' does not exist

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

标签: pythondockerflask

解决方案


如果发生了一些特定于烧瓶的目录魔法,请原谅我,但我认为这是从哪里运行 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"]

祝你好运!

奥利弗


推荐阅读