应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

Docker 自定义网络。Docker自定义网络实现容器互联

14111人阅读 2022/9/4 23:20 总访问:5182327 评论:2 收藏:0 手机
分类: docker

Docker 自定义网络

1) 使用docker network 查看网络相关的帮助命令。如图所示

  1. docker network --help

可以看到网络相关的命令有connect、create、inspect、rm等。

2) 查看创建网络的帮助命令。如图所示

  1. docker network create --help

常用的有—driver指定网络模式、—gateway指定网关、—subnet指定子网。

3) 使用命令查看一下目前docker内部的默认网络。如图所示

  1. docker network ls

可以看到里边的默认网络有很多,其中桥接模式有三个。

4) 我们查看一下几个桥接网络的详情

查看一下名称叫bride的网络详情,如图所示

  1. docker network inspect bridge

可以看到其中的子网是172.17.0.0/16,网关是172.17.0.1

查看一下名称叫docker_gwbridge的网络详情,如图所示

可以看到其中的子网是172.19.0.0/16,网关是172.19.0.1。

还有另外一个桥接网络root_default,我们也可以看一下它的返回情况。

  1. [
  2. {
  3. "Name": "root_default",
  4. "Id": "741b51653fac904c07a8457cd4f50971ef4de179a10082fe3329ec84fdb5edbd",
  5. "Created": "2022-08-22T09:37:24.69441739+08:00",
  6. "Scope": "local",
  7. "Driver": "bridge",
  8. "EnableIPv6": false,
  9. "IPAM": {
  10. "Driver": "default",
  11. "Options": null,
  12. "Config": [
  13. {
  14. "Subnet": "172.18.0.0/16",
  15. "Gateway": "172.18.0.1"
  16. }
  17. ]
  18. },
  19. "Internal": false,
  20. "Attachable": true,
  21. "Ingress": false,
  22. "ConfigFrom": {
  23. "Network": ""
  24. },
  25. "ConfigOnly": false,
  26. "Containers": {},
  27. "Options": {},
  28. "Labels": {
  29. "com.docker.compose.network": "default",
  30. "com.docker.compose.project": "root",
  31. "com.docker.compose.version": "1.29.2"
  32. }
  33. }
  34. ]

可以看到其中的子网是172.18.0.0/16,网关是172.18.0.1。

我们了解了目前桥接网络所使用的子网和网关这些,我们也可以来自定义一个桥接网络。要注意网段不要冲突了。我们可以考虑使用172.22.0.1这个网络

5) 使用命令创建自定义网络。如图所示

  1. docker network create --driver bridge --subnet 172.22.0.0/16 --gateway 172.22.0.1 mynet

我们看到我们的自定义网络已经创建成功了。我们使用了—driver指定了网络模式、使用—gateway指定了网关、使用了—subnet指定了子网。当然也可以不用指定网关与子网它会自动识别。

自定义网络成功创建后,我们就可以在启动容器的时候使用我们创建的自定义网络了。


还有要注意一下,创建自定义网络指定网关,子网这些的时候要看一下自己的机器的网络环境,最好参考一下当前默认网络使用的子网和网关这些,否者可能会导致自定义网络影响宿主机的远程连接。比如我们这里的环境是虚拟机,远程连接使用的网段是192.168.6.xxx,如果我们自定义网络的时候也使用了192.168这类的特殊地址,就会造成远程连接失效。使用的docker network create —driver bridge —subnet 192.168.0.0/16 —gateway 192.168.0.1 mynet命令创建就会造成远程连接失效,应该这类地址范围太广了,而且太特殊了,和我们本地环境网络冲突,造成无法连接。

6) 查看一下我们创建的网络的详情,如图所示。

  1. docker network inspect mynet

其中网络模式、网关、子网等关键信息都可以在上面看到。

Docker自定义网络实现容器互联

1) 使用自定义网络创建一个服务, 如图所示。

  1. docker run -itd --name nginx-net-01 --net mynet -p 9100:80 nginx

使用命令查看一下网络详情,可以看到刚跑的容器网络配置加进来了,ip地址也分配了,是整个网段的第二个地址,如图所示。

当然直接访问是肯定没有问题的,如图所示。

我们如果把刚刚创建的容器删除掉,在查看一下网络详情,会发现容器相关的也自动被删除掉了,如图所示。

2) 使用自定义网络在创建一个服务, 如图所示。

  1. docker run -itd --name nginx-net-02 --net mynet -p 9101:80 nginx

使用命令查看一下网络详情,可以看到刚跑的容器网络配置加进来了,ip地址也分配了,是整个网段的第三个地址,如图所示。

我们可以看到我们刚刚跑的两个容器,ip地址属于同一个网段那么他们应该就可以进行相互通信,下一步我们进行容器之间的网络互联测试。

3) 测试容器之间的互联

先进入其中一个容器

  1. docker run -itd --name nginx-net-02 --net mynet -p 9101:80 nginx

然后执行ping命令,执行ping命令的时候可能会出现docker 容器内部无法使用ping命令的错误。报错ping command not found,如图所示。

解决办法,使用如下命令解决

  1. apt-get update
  2. apt install iputils-ping
  3. //这个可装可不装
  4. apt install net-tools

安装之后在执行ping命令进行测试,通过容器2的ip进行ping测试,如图所示。

  1. ping 172.22.0.3

通过容器2的容器名进行ping测试,如图所示。

  1. ping nginx-net-02

可以看到不管通过容器2的ip地址还是容器名称都可以实现连接的,这在微服务的环境下是非常方便的。

测试的时候还可以使用如下命令进行测试,如图所示。

  1. docker exec -it nginx-net-01 ping nginx-net-02

使用容器名称或者ip地址都可以。


如果不使用自定义网络,所有的容器在不指定网络情况下,都是由docker0路由的,Docker会给我们容器默认分配一个随机的可用IP地址,这些IP地址之间是可以进行网络交互的,但是无法通过容器名称来连接。这在微服务场景下就不是很科学了,因为在微服务部署的场景下,注册中心是使用服务名来唯一识别微服务的,而我们上线部署的时候微服务对应的IP地址可能会改动,所以我们需要使用容器名来配置容器间的网络连接,但是默认网络就不能使用容器名称来连接,虽然可以使用指定–link来实现容器名称进行连接,但是是单向的反过来就不行,所以我们还是推荐使用自定义网络。

4) 实现不同网络间的容器互联

在没有使用connect命令的情况下,不同网络间的容器是无法进行网络连接的。我们下面进行详细的测试。

我们重新创建一个容器,不指定网络

  1. docker run -itd --name nginx-net-02 --net mynet -p 9101:80 nginx

然后我们执行docker inspect nginx-net-03查看一下详情,主要是找到网络相关的信息,如图所示。

可以发现和我们前面创建的2个容器不在一个网段上面,我们进行ping测试

  1. docker exec -it nginx-net-01 ping nginx-net-03
  2. docker exec -it nginx-net-01 ping 172.17.0.2

可以看到不管是进行容器名或者是容器的ip通信都是无法连通的,如图所示。

不同Docker网络之间的容器想要连接的话,需要把该容器注册到另一个容器所在的网络上,使用docker connect命令。

  1. docker network connect mynet nginx-net-03

设置成功之后我们使用命令查看一下我们自定义网络的详情,如图所示。

  1. docker network inspect mynet

可以看到我们刚刚连接的网络已经被注入进来了,也分配了ip地址。

重新执行命令进行容器之间的互联,如图所示。可以看到现在进行容器互联是完全没问题的。

我们再次查看容器nginx-net-03的详情,看看网络情况,如图所示。

我们可以看到容器nginx-net-03被分配了两个网络,默认的bridge与mynet,其实它能够和容器nginx-net-02与容器nginx-net-01通信,还是因为他们都使用了mynet这个自定义网络,让它们在同一个网段。

视频地址:
链接: https://pan.baidu.com/s/1Uvq7yoP5LN6ihuWtd4Rmdg?pwd=kdzf 提取码: kdzf 复制这段内容后打开百度网盘手机App,操作更方便哦


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

默认昵称

2023/2/6 9:28:12

不同宿主机器上的docker能够访问通信吗?主机之间互通,运行在各个主机上的docker访问

剑轩:@默认昵称可以哇,搭建一个docker集群就行了哇,本身就可以相互通讯的!

2023/2/6 10:08:42 回复

window7 Docker启动失败 error: Failed to create the VirtualBox object。VirtualBox com对象失败

docker启动失败 报错 error: Failed to create the VirtualBox object这个错是因为:virtuelbox 无法启动,所以启动之后会...

Docker启动报错 No default Boot2Docker ISO found locally downloading the latest

这是因为,启动时如果检测到没有 Boot2Docker,就会去下载,这个下载过程出现网络连接上的错误了,导致启动失败。可以去下...

Docker常用命令删除镜像命令进入容器、Docker重启命令等

1. docker version查看 Docker 版本信息2. docker info显示 Docker 系统信息,包括镜像,容器数等3. 运行容器第一次使用:d...

Docker 二次启动失败(本人这里使用的是hyper-v)

fatal: failed to start daemon: Error initializing network controller: Error creating default network: hnsCall faile...

Docker中Sware集群与service

swarm 总结:1,docker中使用swarm集群可以达到多任务分配到不同的节点进行处理,如果有空闲的docker机子将会把请求的处理...

.netCore 使用分布式缓存(Docker+redis)

1. 通过docker创建 Redis执行命令:dockerrun--nameasp-redis-p6379:6379-dredis查看redis状态:dockerps可以发现alreadywo...

.net Core3.0在Ubuntu 16.04上面的部署(Supervisor+nginx)(扩展Docker)

前 言Linux 随着Linux越来越流行,本人一个.net程序员也多次研究linux与.net的相关产品,以及中间件的使用方式。So今天给...

Docker 下载 mcr.microsoft.com/dotnet/core/sdk:3.1 老不行

请将其修改为:mcr.azk8s.cn/dotnet/core/sdk:3.1

Docker常用命令

Docker简单命令整理清单[TOC] Login 获取账户信息获取账户信息 docker info | sed '/Username:/!d;s/.* //' ...

windows安装Docker

win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/do...

Linux 安装Web版Vscode(Docker+Local)

Linux 安装Web版Vscode(Docker+Local)[TOC] code-server 介绍 在任何地方的任何机器上运行VS代码,并在浏览器中访问它...

Docker运行 Elasticsearch Kibana和Cerebro

Docker运行 Elasticsearch Kibana和Cerebro[TOC] Demo 运行 Docker-compose,本地构建更高效的开发环境,更直观地了解 El...

Docker部署简单的mysql

Docker部署简单的mysql[TOC] 首先这玩意我是真不想写,网上写的太多了,但是又没有找到快速的创建方式。so…有疑问都可...

Unable to get the local Boot2Docker ISO version: Did not find prefix "-v" in version string

我已经从 github 上下载 v19.03.12 的镜像到 vps 然后拖回本地放在 C:\Users\Administrator.docker\machine\cache 下了。依...

Docker容器和镜像的区别

下面这两个比喻说得比较好 镜像就类似操作系统光盘介质,容器相当于通过光盘安装后的系统。通过光盘(镜像),我们能在不同...