Docker网络的配置
Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。
当 Docker 启动时,会自动在主机上创建一个 docker0
虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
外部访问容器
从前面的笔记中,可通过docker run -p hostPort:containerPort
或者 docker run -P
来映射访问端口
Docker容器的网络互联
新建bridge网络
不指定网络驱动时默认创建的bridge网络
docker network create
如:docker network create -d bridge my-net
docker network create -d bridge --subnet 172.19.0.0/16 my-net-2
docker network create -d bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 my-net-3
-d
参数指定 Docker 网络类型,有 bridge
overlay
。
查看所有的docker网络
docker network ls
网络类型:
bridge
: 桥接(docker 默认)none
: 不配置网络host
: 和宿主机共享网络container
: 容器内网络连通
查看网络内部信息
docker network inspect
如:docker network inspect my-net
容器使用指定的网络
docker run --net
or docker run --network
--net=bridge|none|container:NAME_or_ID|host
or --network=bridge|none|container:NAME_or_ID|host
运行一个容器并连接到新建的 my-net
网络
docker run -it --name centos01 --network my-net centos:7.9.2009 /bin/bash
再运行一个容器并加入到 my-net
网络
docker run -it --name centos02 --network my-net centos:7.9.2009 /bin/bash
再运行一个容器不指定网络.则默认是bridge
docker run -it --name centos03 centos:7.9.2009 /bin/bash
等价于:docker run -it --name centos03 --network bridge centos:7.9.2009 /bin/bash
下面通过 ping
来证明 centos01
容器和 centos02
容器建立了互联关系。但与centos03
无法建立
如果需要打通 centos01
,centos02
与centos03
互通,需要使用docker network connect
网络互通
docker network connect
将 centos03
加入到 my-net:
docker network connect my-net centos03
因此这三个容器的网络情况:
docker inspect centos01 # my-net
docker inspect centos02 # my-net
docker inspect centos03 # bridge,my-net
断开网络与移除网络
docker network disconnect
centos03容器从my-net网络中断开
docker network disconnect my-net centos03
配置 DNS
配置全部容器的 DNS ,可以在 /etc/docker/daemon.json
文件中增加以下内容来设置。
配置完,需要重启 Docker 才能生效。
查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:
docker run -it centos:7.9.2009 cat etc/resolv.conf
扩展:Docker查看容器IP地址
1.查看Docker的底层信息。
docker inspect 容器名称
or docker inspect 容器id
所有可以根据底层信息查询:
docker inspect 容器id --format='{{.NetworkSettings.IPAddress}}'
docker inspect 容器名称 --format='{{.NetworkSettings.IPAddress}}'
2.进入容器,安装net-tools