11.5. ポートマッピングによるコンテナー間の通信

2 つのコンテナー間で通信する最も便利な方法は、公開ポートを使用することです。ポートの公開は、自動と手動の 2 つの方法で行うことができます。

前提条件

  • container-tools メタパッケージがインストールされている。

手順

  1. 未公開のコンテナーを実行します。

    # podman run -dt --name=web1 ubi9/httpd-24
  2. 自動的に公開されたコンテナーを実行します。

    # podman run -dt --name=web2 -P ubi9/httpd-24
  3. 手動で公開したコンテナーを実行し、コンテナーポート 80 を公開します。

    # podman run -dt --name=web3 -p 9090:80 ubi9/httpd-24
  4. すべてのコンテナーをリスト表示します。

    # podman ps
    
    CONTAINER ID  IMAGE                                            COMMAND               CREATED         STATUS             PORTS                                             NAMES
    f12fa79b8b39  registry.access.redhat.com/ubi9/httpd-24:latest  /usr/bin/run-http...  23 seconds ago  Up 24 seconds ago                                                    web1
    9024d9e815e2  registry.access.redhat.com/ubi9/httpd-24:latest  /usr/bin/run-http...  13 seconds ago  Up 13 seconds ago  0.0.0.0:43595->8080/tcp, 0.0.0.0:42423->8443/tcp  web2
    03bc2a019f1b  registry.access.redhat.com/ubi9/httpd-24:latest  /usr/bin/run-http...  2 seconds ago   Up 2 seconds ago   0.0.0.0:9090->80/tcp                              web3

    以下が確認できます。

    • コンテナー web1 には公開ポートがなく、コンテナーネットワークまたはブリッジにでのみアクセスできます。
    • コンテナー web2 は、ポート 43595 と 42423 を自動的にマッピングして、それぞれアプリケーションポート 8080 と 8443 を公開します。

      注記

      registry.access.redhat.com/9/httpd-24 イメージの ContainerfileEXPOSE 8080EXPOSE 8443 コマンドがあるため、自動ポートマッピングが可能です。

    • コンテナー web3 は手動でポートを公開しています。ホストポート 9090 は、コンテナーポート 80 にマッピングされます。
  5. web1web3 コンテナーの IP アドレスを表示します。

    # podman inspect --format='{{.NetworkSettings.IPAddress}}' web1
    # podman inspect --format='{{.NetworkSettings.IPAddress}}' web3
  6. <IP>:<port> 表記を使用して web1 コンテナーに到達します。

    # curl 10.88.0.14:8080
    ...
    <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title>
    ...
  7. localhost:<port> 表記を使用して web2 コンテナーに到達します。

    # curl localhost:43595
    ...
    <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title>
    ...
  8. <IP>:<port> 表記を使用して web3 コンテナーに到達します:

    # curl 10.88.0.14:9090
    ...
    <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title>
    ...