podman で 2 つのルートフル コンテナ間の通信ができない

podman で 2 つのルートフル コンテナ間の通信ができない

2 つの nginx コンテナを実行しています。

1 つはポート 80 でリッスンし、もう 1 つは 8080 でリッスンします。

実行方法は次のとおりです。

sudo podman run --rm \
 -t \
 -p 8080:80 \
 --publish-all \
 --name nginx-two \
 -v ./html2/:/usr/share/nginx/html \
 -v ./html2/conf/default.conf:/etc/nginx/conf.d/default.conf \
 -d nginx

二番目:

sudo podman run --rm -t -p 80:80 --name nginx -v ./html/:/usr/share/nginx/html -v ./html/conf/conf.d:/etc/nginx/conf.d -d nginx

NGiNX 設定:

location / {
    proxy_pass http://10.88.0.37:8080;
}

私も試しました:

location / {
    proxy_pass http://127.0.0.1:8080;
}

この設定はコンテナによって使用されます--name=nginx

次のようなエラーが発生します:

2020/01/26 15:33:05 [error] 8#8: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 10.88.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "localhost"
10.88.0.1 - - [26/Jan/2020:15:33:05 +0000] "GET / HTTP/1.1" 502 157 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0" "-"

これらのコンテナを相互に通信させる方法はありますか?

私も を使ってみました--pod。しかし、次のエラーが発生しました:

Error: cannot set port bindings on an existing container network namespace

答え1

--publish-allpodman-run のマニュアル ページには、公開されているすべてのポートをホスト インターフェイスのランダム ポートに公開することが示されているため、を使用しないでください-p。したがって、 のオプションで十分です。

両方のコンテナが配置される専用のネットワークを作成すると、問題の解決に役立つ可能性があります。その後、コマンド--network=network-idのオプションを使用してそれを参照できますrun

ポッドを使用する場合、ポート マッピングはポッド内のコンテナーではなく、ポッド自体で定義する必要があります。

podman pod create --name mypod -p 80:80

ポート 80 が競合するため、2 つの nginx インスタンスを持つ単一のポッドで実行することはできません (イメージの公開ポートを使用します)。

Red Hat はわかりやすい説明を公開しました:https://www.redhat.com/sysadmin/container-networking-podman

関連情報