码头工人。无此文件或目录

Kat*_*one 5 python linux command-line-interface docker boot2docker

我有一些文件,我想将它们移动到 docker 容器。但最后docker找不到文件..

包含本地机器上文件的文件夹位于/home/katalonne/flask4

文件结构(如果重要):

如果重要的话,文件结构Dockerfile

#
# First Flask App Dockerfile
#
#

# Pull base image.
FROM centos:7.0.1406

# Build commands
RUN yum install -y python-setuptools mysql-connector mysql-devel gcc python-devel
RUN easy_install pip
RUN mkdir /opt/flask4
WORKDIR /opt/flask4
ADD requirements.txt /opt/flask4
RUN pip install -r requirements.txt
ADD . /opt/flask4

# Define deafult command.
CMD ["python","hello.py"]

# Expose ports.
EXPOSE 5000
Run Code Online (Sandbox Code Playgroud)

所以我用这个命令构建了图像:

docker build -t flask4 .
Run Code Online (Sandbox Code Playgroud)

我通过以下方式运行容器:

docker run -d -p 5000:5000 -v /home/Katalonne/flask4:/opt/flask4 --name web flask4
Run Code Online (Sandbox Code Playgroud)

当我想在容器上运行文件时:

docker logs -f web
Run Code Online (Sandbox Code Playgroud)

我收到这个错误,它找不到我的 hello.py 文件:

python: can't open file 'hello.py': [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)

我的错是什么?

PS:我是 Docker 和 Linux 部分菜鸟。

Cth*_*ood 6

与 Dockerfile 位于同一位置的文件和目录确实(暂时)可用于您的 docker 构建。但是,在 docker 构建之后,除非您使用过ADDCOPY将这些文件永久移动到 docker 容器,否则在构建完成后,它们将不可用于 docker 容器。该文件上下文用于构建,但您希望将它们移动到容器中。

您可以添加以下命令:

...
ADD . /opt/flask4
ADD . . 

# Define deafult command.
CMD ["python","hello.py"]
Run Code Online (Sandbox Code Playgroud)

该行 ADD . .应该将临时构建上下文中的所有内容复制到容器中。这些文件将转到的位置是您WORKDIR指向的位置(/opt/flask4)。

如果您只想将 hello.py 添加到容器中,请使用

ADD hello.py hello.py
Run Code Online (Sandbox Code Playgroud)

因此,当您运行 时CMD ["python","hello.py"]pwd您将所在的位置是/opt/flask4,并且 hello.py 应该在其中,并且python hello.py在该目录中运行该命令应该可以工作。

HTH。