このページで解説している内容は、以下の 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 update | apk パッケージマネージャーを使用して、パッケージリストを更新する。 |
&& | 前のコマンドが成功した場合にのみ、次のコマンドを実行する。 |
apk add --no-cache | apk パッケージマネージャーを使用して、--no-cache オプションを指定してPython3をインストールする。 |
python3 | インストールするパッケージの名前。 |
これらのコマンドを組み合わせることで、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のバージョンが表示されます。
コマンドにエラーがある場合には、どのコマンドにエラーがあるのかをエラーメッセージが指摘してくれます。その個所を修正することでエラー解決していきます。