A certain engineer "COMPLEX"

開発メモ その149 Dockerで固定IP

Introduction


備忘録。

Resolution


そのものずばりな記事がこちら。すごく丁寧。

# Dockerで固定IPアドレスを使う。最近のDockerでは固定IPアドレスが普通に使えるようになっていたのでメモ。試した環境はCentOS7です。## 新しいバージョンのDockerを...

ネットワークを作成

ここが大事。
既定のネットワークであるBridgeでは固定IPが使えない。


$ docker network create --subnet=<ネットワークアドレス>/<サブネットマスク> <新しいネットワーク名>


$ docker network create --subnet=172.16.0.0/16 mynet

作成したネットワークは下記で確認。


$ docker network ls
NETWORK ID NAME DRIVER SCOPE
a4a7dc12da84 bridge bridge local
b2e97ac5fc42 host host local
ecaf2a1b55d3 mynet bridge local
c6d5386a2054 none null local

$ docker network inspect mynet
[
{
"Name": "mynet",
"Id": "ecaf2a1b55d3be072f58c5629e0a0b5081af0769a43fb40824f032e5361f9355",
"Created": "2018-11-10T13:28:59.340134Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.16.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]

ネットワークに追加

コンテナ実行時にネットワークを指定してIPも指定します。
当然、IPはネットワークで指定したネットワークアドレスの範囲内であること。

例えば下記のように指定します。


$ docker run --name mysql ^
-e MYSQL_ROOT_PASSWORD=password ^
-d ^
-v /d/virtualMachines/docker/volume/mysql:/var/lib/mysql ^
-p 3306:3306 ^
--net=mynet ^
--ip=172.16.0.2 ^
mysql:5.7

--netを省略すると、下記のように怒られます。


docker: Error response from daemon: user specified IP address is supported on user defined networks only.

ネットワークの確認

コンテナの中に入って確認してみます。


$ docker exec -it mysql /bin/bash
# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.16.0.2 4055c6c61419

dockerコンテナの既定のIPアドレスは172.17.0.0/16なので、きちんと変わっていますね。

疎通確認

コンテナ起動時にポート転送設定(-p オプション)がしてあるなら、ホストOSからでもつながります。
逆に設定がしていないなら、同一のdockerネットワークを経由しないとつながらなくなります。

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。