默認情況下Docker的網絡模式為Bridge,當Docker進程啟動時,會在主機上創建一個名為docker0的虛擬網橋,此主機上啟動的Docker容器會連接到這個虛擬網橋上。從docker0子網中分配一個IP給容器使用,并設置docker0的IP地址為容器的默認網關。這樣容器間就可以相互通信。但是此種方式可能隨著容器的重啟的原因,ip發生變化。(比如容器1開始ip為192.168.0.110,重啟后變成了192.168.0.121)。如何解決這個問題呢?
第一種:使用link實現容器互通
創建一個Nginx容器
docker run -d --name nginx -p 80:80 -p 8080:8080 7743d9092020
創建一個nginx容器
創建容器2并添加link
docker run -d --name to2 --link nginx 94e31e5297d1
容器2
進入創建的容器查看hosts
docker exec to2 cat /etc/hosts
查看hosts
查看環境變量env
docker exec to2 env
查看env
查看在to2容器中是否可以ping的通nginx容器
ping
此種方式的缺點是第一個容器不能使用link,因為在他上面沒有容器了。所以此種方式的缺點還是大大的存在。如何避免呢?通過自定義網絡。
第二種:自定義網絡
創建一個共享網絡
docker network create --subnet=172.18.0.0/24 net1
創建共享網絡
--subnet是定義網段
創建容器指定共享網絡,ip,和別名
docker run -d --name to1 --net=net1 --ip 172.18.0.2 --net-alias tom1 94e31e5297d1
按此種方式創建2個容器
創建容器
查看net1網絡
查看net1網絡
容器已經在這里定義好了,這樣即使啟動也不會改變IP了。進入to1通過別名ping一下。
ping
總結:
第一種方式由于有一個容器是不能設置link的,所以此種方式已經開始慢慢沒人使用了,更多的是采用自定義網絡來實現。