如不懂Docker的网络模式及网络配置的请查看Docker四种网络模式和Docker网络配置
一、Docker如何查看容器ip
docker inspect -f '{
{range .NetworkSettings.Networks}}{
{.IPAddress}}{
{end}}' container_name_or_id
可直接获得容器的ip地址如:172.18.0.4
显示所有容器IP地址:
docker inspect --format='{
{.Name}} - {
{range.NetworkSettings.Networks}}{
{.IPAddress}}{
{end}}' $(docker ps -aq)
常用方法有两种
docker inspect 容器ID | grep IPAddress
方法二
查看docker name:
sudo docker inspect -f='{
{.Name}}' $(sudo docker ps -a -q)
查看dockers ip:
sudo docker inspect -f='{
{.NetworkSettings.IPAddress}}' $(sudo docker ps -a -q)
综上,我们可以写出以下脚本列出所有容器对应的名称,端口,及ip
docker inspect -f='{
{.Name}} {
{.NetworkSettings.IPAddress}} {
{.HostConfig.PortBindings}}' $(docker ps -aq)
二、为容器指定固定ip
当运行一个容器需要指定的网络的时候,就可以通过--network参数来指定我们的容器连接到某一个被指定的网络。
1.创建网络名为net01,网关是10.1.9.1的网络
[root@docker02 opt]docker network create -d bridge --subnet 10.1.9.0/24 --gateway 10.1.9.1 net01
53db74e6642a2a0fad3b55ef5c109b79b36a100df733074f300ff222828ec6ea
[root@docker02 opt]docker network ls
NETWORK ID NAME DRIVER SCOPE
aa53a77695ff bridge bridge local
452e063a1c6f harbor_harbor bridge local
3a821c0610b7 host host local
53db74e6642a net01 bridge local
18f030428279 none null local
2.创建一个容器1,指定IP是10.1.9.100,网络是net01
[root@docker02 opt]docker run -it --rm --network=net01 --ip 10.1.9.100 busybox
/ #
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
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
166: eth0@if167: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:0a:01:09:64 brd ff:ff:ff:ff:ff:ff
inet 10.1.9.100/24 brd 10.1.9.255 scope global eth0
valid_lft forever preferred_lft forever
3.创建一个容器1,指定IP是10.1.9.101,网络是net01
[root@docker02 ~]docker run -it --rm --network=net01 --ip 10.1.9.101 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
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
177: eth0@if178: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:0a:01:09:65 brd ff:ff:ff:ff:ff:ff
inet 10.1.9.101/24 brd 10.1.9.255 scope global eth0
valid_lft forever preferred_lft forever
4.测试自定义网络的IP连通性
/ # ping 10.1.9.100
PING 10.1.9.100 (10.1.9.100): 56 data bytes
64 bytes from 10.1.9.100: seq=0 ttl=64 time=0.141 ms
64 bytes from 10.1.9.100: seq=1 ttl=64 time=0.064 ms
64 bytes from 10.1.9.100: seq=2 ttl=64 time=0.174 ms
64 bytes from 10.1.9.100: seq=3 ttl=64 time=0.069 ms
64 bytes from 10.1.9.100: seq=4 ttl=64 time=0.070 ms
64 bytes from 10.1.9.100: seq=5 ttl=64 time=0.064 ms
5.查看net01网络信息
[root@docker02 opt]docker network inspect net01
[
{
"Name": "net01",
"Id": "412877924ea50a7e2838930b040ebd19f75e8808cba5220df03f23b8e9fa2ba0",
"Created": "2018-03-29T14:29:02.930787227-04:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.1.9.0/24",
"Gateway": "10.1.9.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"eb264658b33532e014624da402ca1d5c9ac2fb723b96b23051834ce2fef86faa": {
"Name": "eager_chatterjee",
"EndpointID": "a0993eefa02a9e562ee25af0c0c5f29bb2e3fd1c00b6e85a12031bb26c1dee57",
"MacAddress": "02:42:0a:01:09:65",
"IPv4Address": "10.1.9.101/24",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]