CLOVER🍀

That was when it all began.

Docker、Docker Composeで起動するコンテナのIPアドレスを指定する

これは、なにをしたくて書いたもの?

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

こちらも事前にネットワークの作成が必要ですね。

Networks | Docker Docs

なお、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アドレスを指定する方法を試してみました。

使う機会はかなり少ないと思いますが、覚えておくと個人的には便利なところもあるので押さえておこうかなと。