このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker入門】よくあるエラーと解決策④

よくあるエラーと解決策④について解説していきます。

コマンドの間違い

コマンドを間違えた場合のエラーを修正する解決策について解説していきます。

不要なDockerオブジェクトの削除

まず、不要なDockerオブジェクトをすべて削除しておきます。

以下のコマンドを実行します。

・「docker system prune -a」コマンドを実行します。

Are you sure you want to continue? [y/N] の質問には「y」と入力します。

PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
(略)

・「docker system prune -a」コマンドで削除されなかったDockerオブジェクトは、個別に削除しておきます。

環境によって削除されずに残っているDockerオブジェクトは異なります。

ディレクトリの移動と作成

ディレクトリを移動します。

・「cd desktop/docker」コマンドを実行します。

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>

 「compose.yaml」ファイルを保存する「error3」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。

  • 「mkdir error3」コマンド
  • 「cd error3」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir error4

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2024/04/30    22:56                error4

PS C:\Users\joeac\Desktop\docker> cd error4
PS C:\Users\joeac\Desktop\docker\error4>

Dockerfileの作成

 PythonがインストールされたAlpineイメージを作成します。下のDockerファイルの内容には、インストールコマンドに間違いがあります。

 apt-get コマンドは、Debian や Ubuntu などの Debian ベースのディストリビューションで利用されますが、Alpine Linux では使用されません。Alpine Linux では apk パッケージマネージャが使われます。

・「code Dockerfile」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\error4> code Dockerfile

VS Codeが起動します。

・下の間違いのあるDockerfileの内容を入力して保存します。

# ベースイメージの指定
FROM alpine:latest

# イメージの更新とPythonのインストール
RUN apt-get update && apt-get install -y \
    python3 \
    && rm -rf /var/lib/apt/lists/*

Alpine Linuxイメージの作成

PythonがインストールされたAlpineイメージを作成します。

・「docker image build -t alpine:v1 .」コマンドを実行します。

コマンドの後ろに「 . 」があることに注意してください。

PS C:\Users\joeac\Desktop\docker\error4> docker image build -t alpine:v1 .
[+] Building 0.0s (0/0)  docker:default
2024/04/30 23:39:03 http2: server: error reading preface from client //./pipe/docker_engine: file [+] Building 3.2s (6/6) FINISHED                                                   docker:default
 => [internal] load build definition from Dockerfile                                         0.0s
 => => transferring dockerfile: 243B                                                         0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                             2.4s
 => [auth] library/alpine:pull token for registry-1.docker.io                                0.0s
 => [internal] load .dockerignore                                                            0.0s
 => => transferring context: 2B                                                              0.0s
 => [1/2] FROM docker.io/library/alpine:latest@sha256:c5b1261d6d3e43071626931fc004f70149bae  0.5s
 => => resolve docker.io/library/alpine:latest@sha256:c5b1261d6d3e43071626931fc004f70149bae  0.0s
 => => sha256:4abcf20661432fb2d719aaf90656f55c287f8ca915dc1c92ec14ff61e67fb 3.41MB / 3.41MB  0.4s
 => => sha256:c5b1261d6d3e43071626931fc004f70149baeba2c8ec672bd4f27761f8e1a 1.64kB / 1.64kB  0.0s
 => => sha256:6457d53fb065d6f250e1504b9bc42d5b6c65941d57532c072d929dd0628977d0 528B / 528B   0.0s
 => => sha256:05455a08881ea9cf0e752bc48e61bbd71a34c029bb13df01e40e3e70e0d00 1.47kB / 1.47kB  0.0s
 => => extracting sha256:4abcf20661432fb2d719aaf90656f55c287f8ca915dc1c92ec14ff61e67fbaf8    0.1s
 => ERROR [2/2] RUN apt-get update && apt-get install -y     python3     && rm -rf /var/lib  0.2s
------
 > [2/2] RUN apt-get update && apt-get install -y     python3     && rm -rf /var/lib/apt/lists/*:
0.189 /bin/sh: apt-get: not found
------
Dockerfile:5
--------------------
   4 |     # イメージの更新とPythonのインストール
   5 | >>> RUN apt-get update && apt-get install -y \
   6 | >>>     python3 \
   7 | >>>     && rm -rf /var/lib/apt/lists/*
--------------------
ERROR: failed to solve: process "/bin/sh -c apt-get update && apt-get install -y     python3     && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 127

View build details: docker-desktop://dashboard/build/default/default/qoktjmymue70mtkjfbx1i5jhl

Alpine Linuxイメージが作成されず、エラーメッセージが出力されます。

エラーの修正

まず、19--20行目のエラーメッセージに注目します。

[2/2] RUN apt-get update && apt-get install -y python3 && rm -rf /var/lib/apt/lists/*:
0.189 /bin/sh: apt-get: not found

[2/2] apt-get update && apt-get install -y python3 && rm -rf /var/lib/apt/lists/* を実行します:
0.189 /bin/sh: apt-get: 見つかりません

次に29行目のエラーメッセージに注目します。

ERROR: failed to solve: process "/bin/sh -c apt-get update && apt-get install -y python3 && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 127

エラー: 解決できませんでした: プロセス "/bin/sh -c apt-get update && apt-get install -y python3 && rm -rf /var/lib/apt/lists/*" は正常に完了しませんでした: 終了コード: 127

Alpine Linuxでは、aptパッケージマネージャーではなく、apkパッケージマネージャーを使用します。

・Dockerfileの間違いを修正します。

# ベースイメージの指定
FROM alpine:latest

# イメージの更新とPythonのインストール
RUN apk update && apk add --no-cache \
    python3

 このDockerfileでは、alpine:latestをベースイメージとして使用し、apkコマンドを使用してPythonをインストールしています。

コマンド意味
RUN apk updateapkパッケージマネージャーを使用して、パッケージリストを更新する。
&&前のコマンドが成功した場合にのみ、次のコマンドを実行する。
apk add --no-cacheapkパッケージマネージャーを使用して、--no-cacheオプションを指定してPython3をインストールする。
python3インストールするパッケージの名前。
RUNコマンドの意味

  これらのコマンドを組み合わせることで、apkパッケージマネージャーを使用して、パッケージリストを更新し、--no-cacheオプションを指定してPython3をインストールします。

再び、Alpine Linuxイメージを作成する

PythonがインストールされたAlpineイメージを作成します。

・「docker image build -t alpine:v1 .」コマンドを実行します。

コマンドの後ろに「 . 」があることに注意してください。

PS C:\Users\joeac\Desktop\docker\error4> docker image build -t alpine:v1 .
2024/04/30 23:54:21 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
2024/04/30 23:54:21 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 3.3s (6/6) FINISHED                                                   docker:default
 => [internal] load build definition from Dockerfile                                         0.0s
 => => transferring dockerfile: 201B                                                         0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                             0.7s
 => [internal] load .dockerignore                                                            0.0s
 => => transferring context: 2B                                                              0.0s
 => CACHED [1/2] FROM docker.io/library/alpine:latest@sha256:c5b1261d6d3e43071626931fc004f7  0.0s
 => [2/2] RUN apk update && apk add --no-cache     python3                                   2.4s
 => exporting to image                                                                       0.1s
 => => exporting layers                                                                      0.1s
 => => writing image sha256:b28f4ec29506872ca89bde3df7acedb9baf3cdad171b9a1cae4646d24581372  0.0s
 => => naming to docker.io/library/alpine:v1                                                 0.0s

View build details: docker-desktop://dashboard/build/default/default/bf1ltl4rsyvze462slgi5uyd7

こんどは、Alpine Linuxのイメージが作成されます。

Alpineコンテナの実行

・「docker container run --rm alpine:v1 python3 --version」コマンドを実行します。

 このコマンドは、コンテナを作成してPythonのバージョンを確認し、コンテナが終了すると自動的にコンテナを削除します。

PS C:\Users\joeac\Desktop\docker\error4> docker container run --rm alpine:v1 python3 --version
Python 3.11.9

Pythonのバージョンが表示されます。


 コマンドにエラーがある場合には、どのコマンドにエラーがあるのかをエラーメッセージが指摘してくれます。その個所を修正することでエラー解決していきます。

関連コンテンツ