Dockerで動かしたアプリが、どのアドレスで接続を受け付けているかを確認する手順です。
確認するには、まずDockerのポート表示を見ます。ファイアウォールの状態だけで判断する前に、どのサービスを、どのアドレスで受け付けているかを整理します。
この記事では、LinuxのVPS上で動くDocker Engineを対象にします。Dockerが用意するネットワークにコンテナをつなぐ、通常のbridge構成での説明です。Docker Desktopやhostネットワークなど、異なる構成は分けて確認してください。
ポート表示を読む
VPSにSSHで接続して、次のコマンドを実行します。SSHは、手元のパソコンからサーバーへ接続して操作する仕組みです。
docker ps --format 'table {{.Names}}\t{{.Ports}}'
このコマンドは、実行中のコンテナの名前とポートを表示します。コンテナは、アプリを動かす環境をまとめたものです。停止中のコンテナは、この一覧に含まれません。設定の変更や再起動は行いません。Dockerを操作する権限がない場合は、一覧を取得できません。Docker公式の一覧表示の説明
次は、表示を説明するための架空例です。
NAMES PORTS
sample-web 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp
sample-api 127.0.0.1:3000->3000/tcp
8080->80 は、VPSの8080番から、コンテナの80番へつなぐ指定です。ポートは、通信を受け付ける番号です。tcp は通信方式の名前です。
左側のアドレスも確認します。
| 表示 | 読み方 |
|---|---|
0.0.0.0:8080 |
VPSのすべてのIPv4アドレスを対象に、8080番を公開する指定 |
[::]:8080 |
VPSのすべてのIPv6アドレスを対象に、8080番を公開する指定 |
127.0.0.1:3000 |
VPS自身から使うIPv4アドレスに、3000番を公開する指定 |
IPv4とIPv6は、ネットワークのアドレスを扱う方式です。両方が表示される場合は、片方だけを見て判断しないようにします。
公開先を省略した場合は、既定ではすべてのホストアドレスが対象になります。既定値を変更している環境もあるため、実際の表示を確認してください。Docker公式のポート公開の説明
次に、意図した構成か確認する
上の表示だけでは、インターネットから接続できるかは決まりません。VPS事業者側の制限なども関係します。
まず、そのサービスにどこから接続する予定かを確認します。
- ブラウザなどから直接アクセスするサービスなのか。
- 同じVPS上のWebサーバーが受け取った通信を、アプリへ渡す構成なのか。
- 別のコンテナから使うサービスなのか。
同じVPS上のWebサーバーからだけ使う構成なら、VPS自身のアドレスへ公開を絞る方法が候補になります。ただし、Webサーバーも別のコンテナで動いている場合は、接続先の考え方が変わります。どの構成でも同じ設定に置き換えられるわけではありません。
Docker Engineの28.0.0より前の版には、127.0.0.1などサーバー自身のアドレスへ公開したポートでも、同じネットワーク区間の別の機器から接続できる場合があるという注意もあります。利用している版と構成を、公式資料で確認してください。Docker公式の注意事項
UFWが有効でも、Dockerの設定は別に見る
UFWは、Ubuntuなどで使われるファイアウォールの設定ツールです。ファイアウォールは、通信を許可したり制限したりする仕組みです。
Dockerで公開したコンテナの通信は、通常のUFWの制限より先にDockerの転送処理へ回ることがあります。「UFWで拒否しているから、このコンテナにも接続できない」とは、状態表示だけでは判断できません。Docker公式のUFW説明
確認する順番は、次のように分けると整理できます。
- Dockerの表示で、サービスと公開先を確認する。
- その公開先が、アプリの構成に合っているか確認する。
- VPS事業者側とサーバー側の通信制限を確認する。
- 必要な接続ができ、不要な接続が制限されるかを、別の端末から確かめる。
4番目の確認結果は、接続元やアドレス、時点によって変わります。サーバー内の表示と、外から接続した結果は分けて記録します。
VPS Checkで分かる範囲
VPS Checkは、サーバー上の接続設定を読み取るツールです。現在のDocker確認では、実行中コンテナのポート表示から、すべてのアドレスへの公開を見つけるとWARNを表示します。
WARNは、そのサービスを直接公開する必要があるかを確認するきっかけです。外部から接続できることを実測した結果ではありません。
Dockerの一覧を取得できなければSKIPになります。PASSが出ても、Dockerのすべてのネットワーク構成や、サーバー全体の安全を確認できたわけではありません。
実機で確認済みの環境はUbuntu 22.04.5 LTS・x86_64です。配布ファイルを使うコマンドと、各表示の読み方は日本語の利用案内に記載しています。
Xの @supportapp3_labでは、個人開発で使う小さなツールと、公開後の確認手順を発信しています。