运行Docker映像时没有此类文件或目录错误

时间:2019-12-27 07:21:34

标签: python-3.x docker

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

docker build -t ${IMAGE_NAME} .

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

  

D:\ Projects \ AI360 \ deep_auto_backbar_api> docker运行dsbyprateekg:prateek_gupta   python3:无法打开文件'/Prepare_Dataset/server_engine/server.py':[错误2]没有这样的文件或目录

我的项目结构如下:

enter image description here

我的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和我的项目结构,并在这里帮助我找出我做错了什么。

3 个答案:

答案 0 :(得分:0)

确保 TAG 的值正确。使用以下命令检查容器是否正在启动;

onPressed: () => _incrementCounter();

使用ENTRYPOINT代替CMD,然后可以像示例中一样在docker run中使用命令行选项。

docker ps -a

参考:link

答案 1 :(得分:0)

使用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

答案 2 :(得分:0)

就我而言,我不得不将行分隔符从 cr / lf (Windows)更改为 lf (Unix / Linux / macOS)。要在IntelliJ中执行此操作,必须在 Project 窗口中选择根文件夹,然后转到 File -> File Properties -> < em>行分隔符-> LF-Unix和macOS(\ n)

另请参见this answer