Docker 使用 Linux 桥接,在宿主机虚拟一个Docker 容器网桥(docker0),Docker 启动一个容器时会根据 Docker 网桥的网段分配给容器一个 IP 地址,称为 Container-IP,同时 Docker 网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。
docker 网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过**[宿主机IP]:[容器端口]访问容器**。
docker run -d --name test1 -P nginx
#随机映射端口(从32768开始)
docker ps -a
浏览器访问:http://192.168.16.16:49153
docker logs的ID/名称
docker logs的ID/名称 #查看容器的输出和日志信息



docker run -d --name test2 -p 48888:80 nginx #指定映射端口
docker ps -a
浏览器访问:http://192.168.16.16:48888
docker logs的ID/名称 #查看容器的输出和日志信息




安装 Docker 时,它会自动创建三个网络 bridge(创建容器默认连接到此网络)、none、host
docker network ls 或 docker network list #查看docker网络列表

使用 docker run 创建 Docker 容器时,可以用 --net或–network 选项指定容器的网络模式


docker run -itd --name test1 centos:7 /bin/bash #--name选项可以给容器创建一个自定义名称
docker ps -a
docker inspect -f '{{.State.Pid}}' d858980a40e8 #查看容器进程号
ls -l /proc/63112/ns #查看容器的进程、网络、文件系统等命名空间编号
docker run -itd --name test2 --net=container:d858980a40e8 centos:7 /bin/bash
docker ps -a
docker inspect -f '{{.State.Pid}}' 5b50874fa836
ls -l /proc/63112/ns #查看可以发现两个容器的 net namespace 编号相同




如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数映射端口到宿主机上面,访问容器的时候就通过 [宿主机IP]:[容器端口]访问容器。
#查看网络模式列表
docker network ls
#查看容器信息(包含配置、环境、网关、挂载、cmd 等等信息)
docker inspect 容器ID

#指定分配容器IP地址
docker run -itd --name test2 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
#以上会报错,因为用户使用的ip地址不被规则所允许,docker0定义的就是按照顺序来,所有需要创建一个
#自定义网络固定IP,可以先自定义网络,再使用指定IP运行docker
docker network 【--network bridge】 create --subnet=172.18.0.0/16 mynetwork
docker run -itd --name test3 --network mynetwork --ip 172.18.0.10 centos:7 /bin/bash

创建自定义网络
或者
#可以先自定义网络,再使用指定IP运行docker
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
----------------------------------------------------------------------------
#docker1为执行ifconfig-a命令时,显示的网卡名,如果不使用--opt参数指定此名称,那你在使用ifconfig -a命令查看网络信息时,看到的是类似br-110eb56a0b22这样的名字,这显然不怎么好记。
#mynetwork为执行docker network list 命令时,显示的bridge网络模式名称。
----------------------------------------------------------------------------
docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash
1.Docker网络模式有哪些
4+1 个docker容器网络模式