Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 运行Docker映像时没有此类文件或目录错误_Python 3.x_Docker - Fatal编程技术网

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

Python 3.x 运行Docker映像时没有此类文件或目录错误,python-3.x,docker,Python 3.x,Docker,我正在学习Docker的概念,并试图为我的项目塑造一个Docker的形象。我已安装Docker Desktop for Windows,并使用以下命令成功构建映像: docker build -t ${IMAGE_NAME} . 但是,当我运行以下命令docker run${IMAGE\u NAME}:${TAG}时,我发现以下文件未找到错误: D:\Projects\AI360\deep\u auto\u backbar\u api>docker run dsbypratekg:pratek

我正在学习Docker的概念,并试图为我的项目塑造一个Docker的形象。我已安装Docker Desktop for Windows,并使用以下命令成功构建映像:

docker build -t ${IMAGE_NAME} .
但是,当我运行以下命令
docker run${IMAGE\u NAME}:${TAG}
时,我发现以下文件未找到错误:

D:\Projects\AI360\deep\u auto\u backbar\u api>docker run dsbypratekg:pratek\u gupta python3:无法打开文件“/Prepare\u Dataset/server\u engine/server.py”:[Errno 2]没有这样的文件或目录

我的项目结构如下所示:

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

请确保标记的值正确。检查容器是否正在启动或未使用以下命令

docker ps -a
使用ENTRYPOINT而不是CMD,然后您可以在docker运行中使用命令行选项,如您的示例所示

ENTRYPOINT ["python3", "Prepare_Dataset/server_engine/server.py"]

参考:

当您使用
COPY Prepare\u Dataset/
时,这将复制目录的内容,而不是目录本身
CMD
路径无效
/Prepare\u Dataset/server\u 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

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


另请参见

请避免使用外部图像,并尽可能使用文本而不是屏幕截图。请看我的编辑我已经验证,标签值是正确的,它是启动。使用ENTRYPOINT而不是CMD没有做任何更改。我得到了相同的错误。