これは、なにをしたくて書いたもの?
Docker、Docker Composeで起動するコンテナのIPアドレスを指定する方法を覚えておきたいなということで。
あまり使わないと思うのですが、覚えておくとこのブログを書くうえでは便利だったりするかもしれません(?)
コンテナのIPアドレスを指定する
まずはDockerをそのまま使う時から。
結論を言うと、ネットワークを作成して--ip
オプションでIPアドレスを指定します。
docker container run / Examples / Connect a container to a network (--network)
よって、事前にネットワークの作成が必要です。
docker network create | Docker Docs
Docker Composeの場合は、service内のnetworksでipv4_addressを指定します。
Define services in Docker Compose / Attributes / networks
こちらも事前にネットワークの作成が必要ですね。
なお、IPv6を使う場合は指定するオプションや属性名が変わります。
あとは簡単に試しておきましょう。
環境
今回の環境はこちら。
$ docker version Client: Docker Engine - Community Version: 28.3.3 API version: 1.51 Go version: go1.24.5 Git commit: 980b856 Built: Fri Jul 25 11:34:09 2025 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 28.3.3 API version: 1.51 (minimum version 1.24) Go version: go1.24.5 Git commit: bea959c Built: Fri Jul 25 11:34:09 2025 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.7.27 GitCommit: 05044ec0a9a75232cad458027ca83437aae3f4da runc: Version: 1.2.5 GitCommit: v1.2.5-0-g59923ef docker-init: Version: 0.19.0 GitCommit: de40ad0
Dockerで起動するコンテナのIPアドレスを指定する
まずはDockerを単体で使う場合から。
いきなり--ip
オプションでIPアドレスを指定して起動使用すると、怒られてしまいます。
$ docker container run -it --rm --name nginx --ip 192.0.2.69 nginx:1.29.1-bookworm docker: Error response from daemon: invalid config for network bridge: invalid endpoint settings: * user specified IP address is supported on user defined networks only * no configured subnet or ip-range contain the IP address 192.0.2.69 Run 'docker run --help' for more information
事前にネットワークを定義した場合のみに使えるよ、と書いてありますね。
というわけで、作成。
$ docker network create my-network --subnet 192.0.2.0/24 b208e35506d0edfece0892cb8c432aa837f37daef9ccde337ffec7523b9b1625
特にDriverは指定していませんでしたが、この場合はデフォルトのbridgeになります。
$ docker network ls NETWORK ID NAME DRIVER SCOPE 8a7c0fa1852b bridge bridge local fca7f7417d39 host host local b208e35506d0 my-network bridge local 0cf44571b281 none null local
コンテナを起動する際には、--ip
に加えて--network
で先ほど指定したネットワークを指定します。
$ docker container run -it --rm --name nginx --network my-network --ip 192.0.2.69 nginx:1.29.1-bookworm
これで起動します。
確認。
$ docker container inspect nginx | jq '.[].NetworkSettings.Networks."my-network".IPAddress' "192.0.2.69"
OKですね。
確認が終わったので、ネットワークも削除しておきます。
$ docker network rm my-network
Docker Composeで起動するコンテナのIPアドレスを指定する
最後はDocker Composeです。
こんな感じでネットワークを定義して、services側でIPアドレスを指定。
compose.yaml
services: nginx: image: nginx:1.29.1-bookworm networks: my-network: ipv4_address: 192.0.2.69 networks: my-network: driver: bridge ipam: config: - subnet: 192.0.2.0/24
起動。
$ docker compose up
確認。
$ docker container inspect [コンテナ名] | jq '.[].NetworkSettings.Networks."[ネットワーク名]".IPAddress' "192.0.2.69"
OKですね。
おわりに
Docker、Docker Composeで起動するコンテナのIPアドレスを指定する方法を試してみました。
使う機会はかなり少ないと思いますが、覚えておくと個人的には便利なところもあるので押さえておこうかなと。