1. ホーム
  2. python-3.x

[解決済み] Dockerイメージの実行中にそのようなファイルやディレクトリがないエラーが発生する

2022-01-26 11:49:13

質問

Dockerのコンセプトを学び、自分のプロジェクトのDockerイメージを作ろうとしています。Docker Desktop for Windowsをインストールし、以下のコマンドでイメージのビルドに成功しました。

docker build -t ${IMAGE_NAME} .

しかし、次のコマンドを実行すると docker run ${IMAGE_NAME}:${TAG} 次のようなファイルが見つからないというエラーが発生します。

<ブロッククオート

D:\ProjectsAI360↵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とプロジェクトの構成を見て、私がここで間違っていることを見つけるのを助けてください。

解決方法は?

を使用する場合 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