公式のトラブルシューティング でより多くの事例・詳細が紹介されてます。
本記事はそれとは別に自分が遭遇した(メモしてた)ものだけ紹介。
- Fedora 30
- podman 1.4.2 ~ 1.7.0
(途中でバージョン上げたので混在しちゃってます…)
ボリュームマウント時に Permission Denied
もしかして: SELinux が有効
💡 podman run
コマンドのマウントオプションで :Z
をつければいい。
(-v <HOST DIR>:<CONTAINER DIR>:Z
とする)
$ podman run --rm -v ${PWD}:/local:Z openapitools/openapi-generator-cli generate \
-i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml \
-g go \
-o /local/out/go
ポートマッピングでエラー
もしかして: ウェルノウンポート( 0-1023
)を対象
非 root
でコンテナを起動した場合はウェルノウンポートへのマッピングができない。
$ podman run --rm -i -t -p 80:8080 test/openapi
ERRO[0000] unable to remove container 844ffd8da76db8b29e64a7cb50a6661f49aaee4091464da1139f014f71839330 after failing to start and attach to it
Error: error from slirp4netns while setting up port redirection: map[desc:bad request: add_hostfwd: slirp_add_hostfwd failed]
💡 1024
番ポート以降を利用するか、root
でコンテナを起動する(sudo podman run ...
)。
ping が通らない
もしかして: 非 root
でコンテナを起動している
非 root
でコンテナを起動した場合、権限がなくて ping
は失敗する。
💡 権限なしの ping
を有効にするには、ホスト上でユーザーの UID を
cat /proc/sys/net/ipv4/ping_group_range
の範囲内にする必要がある。
具体的には以下の設定をすればいい(値 65535
は許可したい UID の範囲に合わせる)。
-
一時的な変更
sudo sysctl -w "net.ipv4.ping_group_range=0 65535"
-
永続的な変更
/etc/sysctl.d/
以下にnet.ipv4.ping_group_range=0 65535
行を含むファイルを配置する。
名前解決できない
もしかして: ファイアウォールによる制限
💡 ホスト側のコンテナ用インタフェース cni-podman0
に対してファイアウォールで許可する。
iptables -t filter -I FORWARD -i cni-podman0 ! -o cni-podman0 -j ACCEPT
firewalld でやる例
$ sudo firewall-cmd --zone=internal --change-interface=cni-podman0 --permanent
$ sudo firewall-cmd --zone=internal --add-source=10.88.0.0/16 --permanent
$ sudo firewall-cmd --reload
コンテナの IP 設定について確認したい
💡 ホストの /etc/cni/net.d/87-podman-bridge.conflist
ファイルに podman
の CNI 設定が記述されている。
デフォルトだと 10.88.0.0/16
の範囲で IP アドレスが割り当てられている。
{
"type": "bridge",
"bridge": "cni-podman0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"routes": [
{
"dst": "0.0.0.0/0"
}
],
"ranges": [
[
{
"subnet": "10.88.0.0/16",
"gateway": "10.88.0.1"
}
]
]
}
},
ホスト側は cni-podman0
インタフェースが作成されて割り当てられる。
$ ip addr show dev cni-podman0
3: cni-podman0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether ae:a9:ea:22:f3:4a brd ff:ff:ff:ff:ff:ff
inet 10.88.0.1/16 brd 10.88.255.255 scope global cni-podman0
valid_lft forever preferred_lft forever
inet6 fe80::aca9:eaff:fe22:f34a/64 scope link
valid_lft forever preferred_lft forever
CNI ネットワークが(cni-podman0
インタフェースも)ない
💡 一度 root
権限でコンテナを起動すると作成されるはず。
Dockerプライベートレジストリに podman push
できない
もしかして: 使用プロトコルが HTTP
$ podman push localhost:5000/my_gitbucket
Getting image source signatures
Error: Error copying image to the remote destination: Error trying to reuse blob sha256:a1aa3da2a80a775df55e880b094a1a8de19b919435ad0c71c29a0983d64e65db at destination: pinging docker registry returned: Get https://localhost:5000/v2/: http: server gave HTTP response to HTTPS client
💡 --tls-verify=false
オプションを設定する(デフォルトで true
になっており、 HTTPS 通信を要求される)。
podman push --tls-verify=false localhost:5000/my_gitbucket
docker-compose.yml
を扱いたい
💡 podman-compose をインストールして使う。
$ pip3 install --user podman-compose
$ podman-compose -f docker-compose.yml up -d
$ podman-compose -f docker-compose.yml down
podman-compose
は podman
をバックエンドとして docker-compose.yml
を実行可能にする。
- rootless で起動可能
-
podman
と Python3 および PyYAML のみに依存 - デーモンなし、セットアップなし