Administrator
发布于 2025-03-20 / 0 阅读
0

docker网络

docker网络

docker网络

容器<>容器 容器->宿主 宿主->容器 容器->互联网 互联网->容器
Bridge(默认) 端口映射/关联
自定义Bridge
(推荐使用,有自动DNS)
端口映射/关联
host(liunx)
网络和主机一致
同等于服务在主机下
host(其他)
只存在一个
* * * * *
none(只有lo的回环网络)

优缺点分析

Bridge(默认) 自定义Bridge host none
优点 自动加入 自动DNS,隔离 网络性能佳 隔离
缺点 无自动DNS
容器间ping ip可以
主机名不行
NAT
容器内容要出来要地址转换
会消耗一定性能
安全问题,仅Linux 不能联网
场景 不建议 单宿主多容器 单容器多端口,不用端口转换 备份,一次性操作

参考命令:

ip a

sudo docker network ls
#查看docker网络

sudo docker network inspect bridge | less
#查看docker默认网桥信息

sudo docker run -d --name egg1 --hostname egg1 praqma/network-multitool
#运行一个容器,这个镜像有很多网络工具

sudo docker ps
#查看容器是否在运行

sudo docker network inspect bridge | jq '.[0] | {Name:.Name, Id:.Id, Driber:.Driber, IPAM:.IPAM.Config, Containers:.Containers, Oprions:.Options}'
#输出docker默认网桥的一些信息

ip a

ip -json address show dev veth6ac44d1 | jq ﹒
#使用json格式输出veth6ac44d1的信息

sudo docker exec -it egg1 bash
#进入容器

ip a

ip -json -detail address show dev eth0 | jq '.[0] | {ifindex:.ifindex,link_index :.link_index, ifname:.ifname, linkinfo:.linkinfo,addr_info:.addr_info}'
#输出eth0的一些信息

sudo docker run -d --name egg2--hostname egg2 praqma/network-multitool
#运行另一个容器

#ping测试,ping ip可以ping通,ping主机名无法ping通,无自动DNS

sudo docker run --name egg3 -d -p 8080:80 nginx
#运行另一个容器,端口映射

#ping测试

curl localhost;8080
#使用本机ip可以就可以访问nginx默认页面

/////////////////////////////////////////////////////////////////////////////////////////

sudo docker network create -d bridge naihe-bridge
#创建一个自定义网桥

ip a

sudo docker network ls
#查看docker网路

sudo docker network inspect naihe-bridge | jq '.[0] | {Name:.Name, Id:.Id, Driber:.Driber, IPAM:.IPAM.Config, Containers:.Containers, Oprions:.Options}'
#输出naihe-bridge网桥的一些信息

sudo docker run -d --name naihe1 --hostname naihe1 --network naihe-bridge praqma/network-multitool
#创建一个新的容器

ip a

sudo docker run -d --name naihe2 --hostname naihe2 --network naihe-bridge praqma/network-multitool
#创建另一个新的容器

sudo docker network inspect naihe-bridge | jq '.[0].Containers '
#查看这两个容器的ip地址

#ping测试,ping主机名可以ping通

sudo docker run -d --name naihe33 --network naihe-bridge praqma/network-multitool
sudo docker run -d --name naihe44 --network naihe-bridge praqma/network-multitool
#创建另两个个新的容器,不设置hostname

#ping测试,可以直接ping容器名可以ping通

/////////////////////////////////////////////////////////////////////////////////////////

sudo docker run --name egg11 --network host -d praqma/network-multitool
#使用host网络创建容器,这个镜像有nginx服务

curl localhost
#可以直接看到nginx服务默认页面

sudo doxker exec -it egg11 bash
vi /usr/share/nginx/html/index.html
#可以对默认内容进行修改

curl localhost
#可以直接看到nginx服务被修改后的样子

sudo doxker exec -it egg11 bash
ip a
#可以看到容器网络和宿主机网络完全一致

/////////////////////////////////////////////////////////////////////////////////////////

sudo docker run --name egg21 -it --network none praqma/network-multitool bash
#使用host网络创建容器并进入

ip a
#可以看到只有lo的回环网络,ping测试就是一个没有网络的主机环境

参考:

【入门篇】Docker网络模式Linux - Bridge | Host | None_哔哩哔哩_bilibili