Chapter 04

エラーのパターン

ほげさん
ほげさん
2021.12.05に更新

ARM Mac と Docker について理解したので、次はエラーのパターンを軽く整理します

大丈夫かなフローチャート

Docker Desktop により Docker という仕組み自体は動きます
なので ARM イメージが手に入れば問題はありません

問題は ARM イメージがない場合です

「アーキテクチャが不適切」と警告をしつつも Intel イメージで起動を試みてくれます
が、その結果が「案外動くな」か「全然動かねぇ」なのかは、かなりコンテナ次第です

ARM Mac で Docker を使うときは、僕は大体こんな感じでそれを確認をしています

逆に言えば ARM イメージがないときはこれだけの障害を覚悟することになります

さらっと個別に見てみましょう

依存するコンテナがあるか

依存するコンテナがある場合、自身に問題がなくても依存先に連動して落ちる可能性があります

ex) Spring が起動時に MySQL に接続する

$ docker compose up -d

$ docker compose ps
NAME      SERVICE    STATUS     PORTS
db        db         exit(1)    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
spring    spring     exit(1)    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
mail      mail       running    0.0.0.0:1025->1025/tcp, :::1025->1025/tcp

過半数落ちてるのでビビりますが、Spring コンテナは問題ない可能性もあります

🤔 とりあえず Spring は保留です、MySQL から調べましょう

コンテナが起動するか

起動を試みてすらくれないことがあります

ex) MySQL

$ docker run -it mysql:8.0
docker: no matching manifest for linux/arm64/v8 in the manifest list entries.

$

うんともすんとも言わないとはこのことです

🤔 とりあえず --platform linux/x86_64 なら起動するかの確認から始めます

起動コマンドがちゃんと動くか

コンテナが起動しても、起動コマンドのプロセスがちゃんと動いてないことがあります

ex) Keycloak ( Auth サーバ )

警告は出つつもコンテナ自体は起動します

$ docker run -p 18080:8080 -it jboss/keycloak:15.0.0
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

$ docker ps
CONTAINER ID  IMAGE                  COMMAND                 CREATED        STATUS        PORTS                                                  NAMES
21ac42a3f761  jboss/keycloak:15.0.0  "/opt/jboss/tools/do…"  4 minutes ago  Up 4 minutes  8443/tcp, 0.0.0.0:18080->8080/tcp, :::18080->8080/tcp  quizzical_poitras

が、ブラウザでは何も確認できません

image

🤔 とりあえずコンテナの起動ログと Keycloak のサーバログの確認から始めます

使いたいコマンドがちゃんと動くか

コンテナが起動しても、使いたいコマンドがちゃんと動かないことがあります

ex) Haskell ( コマンド名は stack )

やはり警告は出ますが、コンテナを起動して接続はできても

$ docker run -it haskell:latest bash
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

# uname -m
x86_64

何をやっても落ちてしまいます

# stack setup
Killed

# echo 'main = print 42' > a.hs

# stack runghc a.hs
Killed

# stack ghci
Killed

コマンドにパスが通っていても、これではどうにもなりません

🤔 とりあえず gg って対処やマニュアルインストールの方法を探すことから始めます

使いたいコマンドの追加モジュールがちゃんと動くか

一見コマンドが動いていても、追加モジュールを入れるとそれが動かないことがあります

ex ) Terraform に対する Terraform Provider

-v はできますが

$ docker run --entrypoint sh -it hashicorp/terraform:1.0.4                                                                                                                          load-test-step1/develop
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

# terraform -v
Terraform v1.0.4
on linux_amd64

initplanhashicorp/terraform-provider-aws が必要だけど、それが動かない

# terraform init
Initializing modules...
SIGSEGV: segmentation violation
qemu: uncaught target signal 11 (Segmentation fault) - core dumped

セグフォしてしまいます

🤔 とりあえず gg って対処やマニュアルインストールの方法を探すことから始めます

ここまで問題がなければ、たぶん大丈夫

アーキテクチャ不一致の警告が出たまま使えることもあります

ex) MailHog

$ docker run -p 8025:8025 -it mailhog/mailhog:latest
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

ちゃんとメールの送信も受信も閲覧もできていて、困ったことはありません

image

🤔 とりあえず動いた判定で使い続けます