version の確認
jessie:~# docker version
Client:
Version: 1.10.0-dev
API version: 1.22
Go version: go1.5.3
Git commit: 7a44265
Built: Thu Jan 14 20:52:45 2016
OS/Arch: linux/amd64
Experimental: true
Server:
Version: 1.10.0-dev
API version: 1.22
Go version: go1.5.3
Git commit: 7a44265
Built: Thu Jan 14 20:52:45 2016
OS/Arch: linux/amd64
Experimental: true
デフォルトネットワークの IP の確認
jessie:~# docker network ls
NETWORK ID NAME DRIVER
1b32fa4cd468 none null
5e4199bd6c79 host host
d63290b470a4 bridge bridge
jessie:~# docker network inspect -f '{{ .IPAM.Config }}' bridge
[{172.17.0.0/16 map[]}]
172.17.0.0/16 だとわかる
172.17.0.0/16 の範囲で IP を指定して実行
jessie:~# docker run -it --rm --ip=172.17.0.30 debian
docker: Error response from daemon: network default not found.
jessie:~# # Network を指定
jessie:~# docker run -it --rm --ip=172.17.0.30 --net=bridge debian
docker: Error response from daemon: User specified IP address is supported on user defined networks only.
作った Network じゃないとダメな模様
Network の作成
jessie:~# docker network create b0
c3571183a425c426f37a3da35912689e9e7eb1c5411588344076272d13fe97fd
jessie:~# docker network ls
NETWORK ID NAME DRIVER
5e4199bd6c79 host host
d63290b470a4 bridge bridge
c3571183a425 b0 bridge
1b32fa4cd468 none null
jessie:~# docker network inspect -f '{{ .IPAM.Config }}' b0
[{ map[]}]
jessie:~# ip a
~~snip~~
11: br-c3571183a425: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:cc:04:57:85 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 scope global br-c3571183a425
valid_lft forever preferred_lft forever
ip を指定しないと inspect ではわからないので ip addr show(ip a)
で確認
172.18.0.0/16 の範囲で IP を指定して実行
jessie:~# docker run -it --rm --ip=172.18.0.30 --net=b0 debian
docker: Error response from daemon: User specified IP address is supported only when connecting to networks with user configured subnets.
IP範囲を指定したネットワークじゃダメっぽい
IP範囲を指定したネットワークの作り直し
jessie:~# # 今回は削除して
jessie:~# docker network rm b0
jessie:~# # 作り直し
jessie:~# docker network create --subnet=172.18.0.0/16 b0
07395c268eba278279125ec802be118493bdab81e6c1661429bba496e001ca2a
jessie:~# docker network inspect -f '{{ .IPAM.Config }}' b0
[{172.18.0.0/16 map[]}]
172.18.0.0/16 の範囲で IP を指定してもっかい実行
jessie:~# docker run -it --rm --ip=172.18.0.30 --net=b0 debian
root@4f7c2cc51f9a:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
13: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:1e brd ff:ff:ff:ff:ff:ff
inet 172.18.0.30/16 scope global eth0
valid_lft forever preferred_lft forever
良い感じ(上記に追加して --net=bridge としてデフォの bridge を指定することは出来なかった)
以下 docker network の挙動だが -p
を使った時の挙動
jessie:~# docker run -it --rm -p 80:80 --ip=172.18.0.30 --net=b0 debian
# 別コンソール
jessie:~# iptables -L DOCKER -n
Chain DOCKER (3 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.18.0.30 tcp dpt:80
ちゃんと設定されてる。