Help us understand the problem. What is going on with this article?

Podmanで遭遇したトラブルシューティング

公式のトラブルシューティング でより多くの事例・詳細が紹介されてます。
本記事はそれとは別に自分が遭遇した(メモしてた)ものだけ紹介。

  • 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 でコンテナを起動した場合はウェルノウンポートへのマッピングができない。

非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 アドレスが割り当てられている。

/etc/cni/net.d/87-podman-bridge.conflistの一部抜粋
{
    "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

エラーメッセージを読むとHTTPS通信を要求している
$ 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 通信を要求される)。

HTTP通信でpush
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-composepodman をバックエンドとして docker-compose.yml を実行可能にする。

  • rootless で起動可能
  • podman と Python3 および PyYAML のみに依存
  • デーモンなし、セットアップなし

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした