运行 Docker 镜像时没有这样的文件或目录错误

新手上路,请多包涵

我正在学习 Docker 概念并尝试制作我的项目的 Docker 映像。我已经安装了适用于 Windows 的 Docker Desktop 并使用以下命令成功构建了映像:

 docker build -t ${IMAGE_NAME} .

但是当我运行以下命令时 docker run ${IMAGE_NAME}:${TAG} 我收到以下文件未找到错误:

D:\Projects\AI360\deep_auto_backbar_api>docker run dsbyprateekg:prateek_gupta python3: 无法打开文件 ‘/Prepare_Dataset/server_engine/server.py’: [Errno 2] 没有那个文件或目录

我的项目结构如下所示:

在此处输入图像描述

我的 Dockerfile.txt 有以下说明:

 FROM python: 3.6-stretch
MAINTAINER PrateekG

# install build utilities
RUN apt-get update && \
    apt-get install -y gcc make apt-transport-https ca-certificates build-essential

# check our python environment
RUN python3 version RUN pip3 --version

# Installing python dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy all the files from the project's root to the working directory
COPY Prepare_Dataset/ .

# Running Python Application
CMD ["python3", "/Prepare_Dataset/server_engine/server.py"]

我怀疑我遗漏了与文件路径相关的内容。请查看我的 Dockerfile 和我的项目结构,并帮助我找出我在这里做错了什么。

原文由 ebsavvy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 966
2 个回答

当你使用 COPY Prepare_Dataset/ . 这将复制目录的内容,而不是目录本身所以 CMD 路径变得无效 /Prepare_Dataset/server_engine/server.py

你需要使用

COPY Prepare_Dataset/ ./Prepare_Dataset/

所以当你复制时你可以验证

Step 5/7 : COPY Prepare_Dataset/ ./Prepare_Dataset/
 ---> Using cache
 ---> 2c5c15c23f65
Step 6/7 : RUN ls | grep "Prepare_Dataset"
 ---> Running in 54147bd4740c
Prepare_Dataset

最好保持惯例以避免将来出现此类错误。

 # SEt workdirectory
WORKDIR /app
# Now it will copy to /app/
COPY Prepare_Dataset/ ./Prepare_Dataset
CMD ["Prepare_Dataset/server_engine/server.py"]

您可以使用以下步骤验证您的问题。

 COPY Prepare_Dataset/ .
#You will see the content but not the directory
RUN ls /

您将看不到该目录,但可以 grep 查找其中的任何文件。

 Step 5/7 : COPY Prepare_Dataset/ .
 ---> Using cache
 ---> e4eec046c860
Step 6/7 : RUN ls | grep "Prepare_Dataset"
 ---> Running in 23e4b2aab3d1
The command '/bin/sh -c ls | grep "Prepare_Dataset"' returned a non-zero code: 1

原文由 Adiii 发布,翻译遵循 CC BY-SA 4.0 许可协议

在我的例子中,我不得不将行分隔符从 cr/lf (Windows) 更改为 lf (Unix/Linux/macOS)。要在 IntelliJ 中执行此操作,您必须在 项目 窗口中选择根文件夹,然后转到 文件-> 文件属性-> 行分隔符-> LF - Unix 和 macOS (\n)

另请参阅 此答案

原文由 Gorgsenegger 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题