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 と公開したポートを使う

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲