トラブルシューティング¶
最終更新日:2024/12/08
ビルドでエラー その1¶
・詳細
rootユーザーで「podman build」すると、なんかエラーが出る。
・エラー内容
sd-bus call: Transport endpoint is not connected: Transport endpoint is not connected
・原因
「DBUS_SESSION_BUS_ADDRESS」と「XDG_RUNTIME_DIR」が他のユーザーで使用されており、それが想定されてないため。
らしい
・解決方法
「DBUS_SESSION_BUS_ADDRESS」と「XDG_RUNTIME_DIR」を未設定状態にする。
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
・参考URL
sd-bus call: Transport endpoint is not connected · Issue #3887 · containers/buildah
https://github.com/containers/buildah/issues/3887
ビルドでエラー その2¶
・詳細
rootユーザーで「podman build」すると、なんかエラーが出る。
・エラー内容
SHELL is not supported for OCI image format, [/bin/bash -o pipefail -c] will be ignored. Must use `docker` format
・原因
Dockerfileが「OCI image format」(Podmanのコンテナイメージフォーマット)でサポートされてないフォーマットだった。
・解決方法
「format」オプションで、Dockerのフォーマットを指定する。
podman build ./ -t redmine_custom:1.0.0 --format docker
・参考URL
podman-build — Podman documentation
https://docs.podman.io/en/latest/markdown/podman-build.1.html#format
外部ファイルにアクセスできない¶
・詳細
コンテナから外部ファイルにアクセスすると「Permission denied」とエラーが出る。
・エラー内容
下記はPythonを動かそうとしたときのエラー。
外部ファイルの「main.py」がパーミッション許可されていない。
python: can't open file '/app/main.py': [Errno 13] Permission denied
・原因
対象のファイルのSELinux(またコイツか・・・)のコンテキストが、コンテナ用にラベルされていない。
・解決方法
「chcon」コマンドでコンテナ用のラベル「container_file_t」を付与する。
chcon -h -t container_file_t main.py
SELinuxのコンテキストは、下記のコマンドなどで確認できる。
ls -lZ
・参考URL
https://ideal-reality.com/computer/server/podman-volume-selinux/
docker-composeが動かない¶
・詳細
「PodmanでDocker_Composeを使う」で導入した「docker-compose」が、OSのパッケージ更新したら動かなくなった(実話)
・エラー内容
[root@localhost redmine]# docker-compose start
Cannot connect to the Docker daemon at unix:///run/user/1000/podman/podman.sock. Is the docker daemon running?
・原因
「podman-docker」などは「podman.socket」のソケットを使用してpodmanのコマンドを実行しているが、このソケットのパスが正しくないパスを指していた。
・解決方法
「podman-docker」が使用している「podman.socket」のソケットのパスを、正しいパスに修正する。
まずは「podman.socket」のソケットのパスを確認する。
「Listen」がソケットのパスになる。
(下記の場合は「/run/podman/podman.sock」)
[root@localhost redmine]# systemctl status podman.socket
● podman.socket - Podman API Socket
Loaded: loaded (/usr/lib/systemd/system/podman.socket; enabled; preset: disabled)
Active: active (listening) since Sun 2024-12-08 13:51:48 JST; 3min 27s ago
Until: Sun 2024-12-08 13:51:48 JST; 3min 27s ago
Triggers: ● podman.service
Docs: man:podman-system-service(1)
Listen: /run/podman/podman.sock (Stream)
CGroup: /system.slice/podman.socket
次に環境変数「$DOCKER_HOST」の値を、「podman.socket」のソケットのパスに修正する。
「$DOCKER_HOST」は「podman-docker」が使用している「podman.socket」のソケットのパス。
スラッシュの数に注意。
(「unix://」「/run/podman/podman.sock」となる)
[root@localhost redmine]# export DOCKER_HOST=unix:///run/podman/podman.sock
[root@localhost redmine]# echo $DOCKER_HOST
unix:///run/podman/podman.sock
最後に「docker-compose」が正常に動作することを確認する。
[root@localhost redmine]# docker-compose start
・参考URL
https://github.com/containers/podman/discussions/16338