Fedora CoreOSではコンテナエンジンがDockerからPodmanに変更になっています。
別途インストールすればDockerも使用できるのですが、PodmanはDockerコマンドも一部を除き互換性がありますのでそのまま使用します。
Podmanのコンテナ間通信はlocalhost(127.0.0.1)のポートを介して行われますが、このlocalhostには実行空間の概念があり、コンテナがリッスンしているのはコンテナ空間のlocalhostになります。
そのため、コンテナ起動時にポートマッピングしてやらないとコンテナの外とは通信できません。
例えば、nginxとphp-fpmを別コンテナにしてnginxからproxyでphp-fpmに接続するとします。
: fastcgi_pass 127.0.0.1:9000; :
: listen = 127.0.0.1:9000 :
nginxとphp-fpmの両コンテナともに
: ExecStart = /usr/bin/podman run -p 9000:9000 ~ :
しかし、これだとコンテナホストのポートとマッピングされてしまうため、コンテナホストの外部(インターネット空間)にポートを開けてしまうことになります。
ファイアウォール等で制御することも可能ですが、コンテナのIPアドレスが動的に変化したり等で結構面倒なことになります。
そこで、コンテナホストとコンテナの間にもう一つPodというものを入れることによって、コンテナホストの外には出さずに他のコンテナとポートマッピングすることが可能になります。
まず、Podを作成します。
sudo podman pod create \
-p 80:80 -p 443:443 \ -p 25:25 -p 465:465 -p 587:587 -p 993:993 -p 995:995 \ -p 221:221 -p 222:222 \ -n container-pod
次に、作成したPodを起動します。
sudo podman pod start container-pod
コンテナの起動時にPodと接続させます。
: ExecStart = /usr/bin/podman run --pod=container-pod ~ :