2026年10月2日
2026年10月2日
DockerコンテナのIPアドレスを確認する方法|docker inspectと接続のしかた
Dockerのコンテナには、接続しているDockerネットワークごとにIPアドレスが割り当てられます。このアドレスは docker inspect などで確認できますが、コンテナを作り直すと変わることがあり、Docker Desktopではホストから直接届きません。
この記事では、IPアドレスを確認するコマンドと、用途ごとにどのアドレスで接続すればよいかを説明します。コマンドは2026年10月時点のDocker Engine 29で動作を確かめています。web はコンテナ名の例なので、自分のコンテナ名かIDに置き換えてください。
docker inspect で確認する
コンテナが接続しているすべてのネットワークのIPアドレスを表示します。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web
複数のネットワークに接続している場合に、ネットワーク名とゲートウェイも並べて表示するには、次のようにします。
docker inspect -f '{{range $name, $net := .NetworkSettings.Networks}}{{$name}} {{$net.IPAddress}} {{$net.Gateway}}{{"\n"}}{{end}}' web
出力の例です。
mynet 172.21.0.2 172.21.0.1
ネットワークの設定をまとめて見たい場合は、JSONで表示します。
docker inspect -f '{{json .NetworkSettings.Networks}}' web
Docker 29 での変更点
以前の記事でよく見かける {{.NetworkSettings.IPAddress}} は、Docker 29では使えません。NetworkSettings の直下にあった IPAddress や Gateway などの項目が削除されたためで、実行すると map has no entry for key "IPAddress" というエラーになります。上のように、.NetworkSettings.Networks の中のネットワークごとの値を使います。この書き方は古いバージョンのDockerでも動きます。
動いているすべてのコンテナのIPアドレスを一覧する
docker inspect -f '{{.Name}} {{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' $(docker ps -q)
出力の例です。コンテナ名の前の / はDockerの表記です。
/web 172.21.0.2
/db 172.21.0.3
ネットワークの側から確認する
あるネットワークにどのコンテナがつながっているかと、そのアドレスを表示します。既定のネットワークは bridge です。ネットワーク名は docker network ls で確認できます。
docker network inspect -f '{{range .Containers}}{{.Name}} {{.IPv4Address}}{{"\n"}}{{end}}' bridge
ネットワークのサブネットとゲートウェイは、次のコマンドで確認できます。
docker network inspect -f '{{json .IPAM.Config}}' bridge
コンテナの中から確認する
コンテナの中でコマンドを実行して確認することもできます。ただし、使えるコマンドはイメージによって違います。
docker exec web hostname -i
docker exec web ip -4 addr show eth0
最小構成のイメージには ip コマンドが無いことがあり、distrolessのようにシェル自体が無いイメージでは使えません。その場合は docker inspect を使います。
コンテナにログインして作業したいときも、SSHは使わず docker exec -it web sh(bashがあれば bash)で入ります。コンテナの中でSSHサーバーを動かす必要はありません。
用途ごとの接続先
コンテナのIPアドレスは、コンテナを作り直したときや、Dockerを再起動したときに変わることがあります。設定ファイルにIPアドレスを書くのではなく、次のように接続します。
| 接続したい場面 | 接続先 |
|---|---|
| ホストやほかのパソコンからコンテナのWebサーバーへ | 公開したポート(-p 8080:80 なら http://ホストのIPアドレス:8080/) |
| コンテナから別のコンテナへ | 同じユーザー定義ネットワークにつなぎ、コンテナ名(Composeならサービス名)で接続 |
| コンテナからホストのサービスへ | Docker Desktopなら host.docker.internal。Linuxでは --add-host=host.docker.internal:host-gateway を付けると同じ名前で使える |
公開したポートを確認する
docker port web
出力の例です。0.0.0.0:8080 は、ホストのすべてのIPアドレスの8080番で受け付けていることを表します。
80/tcp -> 0.0.0.0:8080
80/tcp -> [::]:8080
Docker Desktop(Mac・Windows)では、コンテナはDockerが動かしている仮想マシンの中にあるため、ホストから 172.17.0.x のようなコンテナのIPアドレスへは基本的に接続できません。公開したポートと localhost で接続します。
コンテナ名で接続する
既定の bridge ネットワークでは、コンテナ名による名前解決ができません。自分で作ったネットワーク(ユーザー定義ネットワーク)につなぐと、DockerのDNSがコンテナ名を解決します。
docker network create mynet
docker run -d --name web --network mynet nginx:alpine
docker run --rm --network mynet alpine wget -qO- http://web/
最後のコマンドで、nginxのページのHTMLが表示されれば、コンテナ名で接続できています。Docker Composeでは、同じ compose.yaml のサービスが同じネットワークに自動でつながるので、サービス名で接続できます。
IPアドレスを固定したい場合
どうしても固定のアドレスが必要な場合は、サブネットを指定したユーザー定義ネットワークを作り、--ip で割り当てます。既定の bridge ネットワークでは指定できません。
docker network create --subnet 172.30.0.0/24 fixednet
docker run -d --name web2 --network fixednet --ip 172.30.0.10 nginx:alpine
Docker Swarm の場合
Swarmのサービスでは、docker service ps はタスクの配置先のノードと状態を表示するだけで、IPアドレスは表示しません。サービスへの接続は、オーバーレイネットワーク上のサービス名(仮想IPに解決される)か、公開したポートを使います。個々のタスクのアドレスを調べる場合は、そのタスクが動いているノードで docker inspect をコンテナに対して実行します。
まとめ
- IPアドレスは
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' コンテナ名で確認する - Docker 29では
{{.NetworkSettings.IPAddress}}が使えないので、.NetworkSettings.Networksの値を使う - ネットワークごとの一覧は
docker network inspect、公開ポートはdocker portで確認する - 接続にはIPアドレスではなく、公開したポートや、ユーザー定義ネットワークでのコンテナ名を使う
- Docker DesktopではコンテナのIPアドレスにホストから届かないので、
localhostと公開したポートを使う
関連記事: