千家信息网

docker如何在不同的Linux机器上实现容器通信

发表于:2025-12-05 作者:千家信息网编辑
千家信息网最后更新 2025年12月05日,这篇文章主要讲解了"docker如何在不同的Linux机器上实现容器通信",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"docker如何在不同的Linu
千家信息网最后更新 2025年12月05日docker如何在不同的Linux机器上实现容器通信

这篇文章主要讲解了"docker如何在不同的Linux机器上实现容器通信",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"docker如何在不同的Linux机器上实现容器通信"吧!

分布式存储有很多工具,今天选择etcd工具,这个是开源的免费分布式存储。

准备实验环境:

docker node1 ip: 192.168.0.109

docker node2 ip: 192.168.0.107

在docker node1 上,下载解压https://github.com/etcd-io/etcd/releases/tag/v3.3.13

vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ nohup ./etcd --name docker-node1 --initial-advertise-peer-urls http://192.168.0.109:2380 \> --listen-peer-urls http://192.168.0.109:2380 \> --listen-client-urls http://192.168.0.109:2379,http://127.0.0.1:2379 \> --advertise-client-urls http://192.168.0.109:2379 \> --initial-cluster-token etcd-cluster \> --initial-cluster docker-node1=http://192.168.0.109:2380,docker-node2=http://192.168.0.107:2380 \> --initial-cluster-state new &[1] 3870vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ nohup: ignoring input and appending output to 'nohup.out'

--name 表示这个名字是docker-node1

--initial-advertise-peer-urls 表示本地地址

./etcdctl cluster-healthmember 72400c6f5c5691f3 is healthy: got healthy result from http://172.16.247.131:2379member dc0810ee9a06524d is healthy: got healthy result from http://172.16.247.132:2379cluster is healthy

在docker node2上也去执行:

wget https://github.com/coreos/etcd/releases/download/v3.0.12/etcd-v3.0.12-linux-amd64.tar.gzvincent@swarm-worker-1:~/etcd-v3.3.13-linux-amd64$ ./etcd --name docker-node2 --initial-advertise-peer-urls http://192.168.0.107:2380 \> --listen-peer-urls http://192.168.0.107:2380 \> --listen-client-urls http://192.168.0.107:2379,http://127.0.0.1:2379 \> --advertise-client-urls http://192.168.0.107:2379 \> --initial-cluster-token etcd-cluster \> --initial-cluster docker-node1=http://192.168.0.109:2380,docker-node2=http://192.168.0.107:2380 \> --initial-cluster-state new &

如何确定我们的cluster已经成功建立了:

在node1上执行:

vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ ./etcdctl cluster-healthmember beb7fd3596aa26eb is healthy: got healthy result from http://192.168.0.109:2379member e6bdc10e37172e00 is healthy: got healthy result from http://192.168.0.107:2379cluster is healthy

然后在node2上执行:

vincent@swarm-worker-1:~/etcd-v3.3.13-linux-amd64$ ./etcdctl cluster-healthmember beb7fd3596aa26eb is healthy: got healthy result from http://192.168.0.109:2379member e6bdc10e37172e00 is healthy: got healthy result from http://192.168.0.107:2379cluster is healthy

这样我们就在两台机器上搭建了一个分布式存储

重启docker服务

因为我们要让docker知道我们要去使用分布式存储。

在docker-node1上执行:

vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ sudo service docker stop[sudo] password for vincent:vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ docker --versionDocker version 17.12.0-ce, build c97c6d6

然后手动启动docker:

vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ sudo /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.0.109:2379 --cluster-advertise=192.168.0.109:2375&[2] 4153

在docker-node2上执行:

sudo service docker stopsudo /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.0.109:2379 --cluster-advertise=192.168.0.109:2375&

创建overlay network

在docker-node1上创建一个demo的overlay network

sudo docker network lsNETWORK ID          NAME                DRIVER              SCOPEf6acf1d69b7c        bridge              bridge              localc051f46f8a15        host                host                local4caf51fb3438        none                null                local
docker network create -d overlay demo1607f5636b8515d7e06d2f13261d32d8370c72de99ffb688ccdce3f6d8bce898
docker network lsNETWORK ID          NAME                DRIVER              SCOPEf6acf1d69b7c        bridge              bridge              local1607f5636b85        demo                overlay             globalc051f46f8a15        host                host                local4caf51fb3438        none                null                local

查看overlay网络的详细信息:

docker network inspect demo[    {        "Name": "demo",        "Id": "1607f5636b8515d7e06d2f13261d32d8370c72de99ffb688ccdce3f6d8bce898",        "Created": "2019-07-01T07:52:43.137469208-07:00",        "Scope": "global",        "Driver": "overlay",        "EnableIPv6": false,        "IPAM": {            "Driver": "default",            "Options": {},            "Config": [                {                    "Subnet": "10.0.0.0/24",                    "Gateway": "10.0.0.1"                }            ]        },        "Internal": false,        "Attachable": false,        "Ingress": false,        "ConfigFrom": {            "Network": ""        },        "ConfigOnly": false,        "Containers": {},        "Options": {},        "Labels": {}    }]

我们会看到在node2上,这个demo的overlay network会被同步创建:

docker network lsNETWORK ID          NAME                DRIVER              SCOPEe944ecd3d81f        bridge              bridge              local1607f5636b85        demo                overlay             globalca2b5e91ee2f        host                host                localcfb09007c0ce        none                null                local

创建连接demo网络的容器

在docker-node1上创建容器

docker run -d --name test1 --network demo vincent/ubuntu-base /bin/bash -c "while true; do sleep 3600; done"c86061fd856cca0d157cc602cd9b98edd9f0fa4db9a26aa77ae2b054d6d804f1
docker container lsCONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS              PORTS               NAMESc86061fd856c        vincent/ubuntu-base   "/bin/bash -c 'while…"   About a minute ago   Up About a minute

查看test1的ip:

docker exec test1 ifconfigeth0      Link encap:Ethernet  HWaddr 02:42:0a:00:00:02          inet addr:10.0.0.2  Bcast:10.0.0.255  Mask:255.255.255.0          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)eth2      Link encap:Ethernet  HWaddr 02:42:ac:12:00:02          inet addr:172.18.0.2  Bcast:172.18.255.255  Mask:255.255.0.0          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:16 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:1308 (1.3 KB)  TX bytes:0 (0.0 B)lo        Link encap:Local Loopback          inet addr:127.0.0.1  Mask:255.0.0.0          UP LOOPBACK RUNNING  MTU:65536  Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

在docker-node2上新建容器test2:

docker run -d --name test2 --network demo vincent/ubuntu-base /bin/bash -c "while true; do sleep 3600; done"31f87913be02db7a8033b407c559a7a213445384d735239ff6504318c5077e46

在docker-node2上测试连通性

docker exec -it test2 ifconfigeth0      Link encap:Ethernet  HWaddr 02:42:0a:00:00:03          inet addr:10.0.0.3  Bcast:10.0.0.255  Mask:255.255.255.0          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)eth2      Link encap:Ethernet  HWaddr 02:42:ac:12:00:02          inet addr:172.18.0.2  Bcast:172.18.255.255  Mask:255.255.0.0          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:16 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:1308 (1.3 KB)  TX bytes:0 (0.0 B)lo        Link encap:Local Loopback          inet addr:127.0.0.1  Mask:255.0.0.0          UP LOOPBACK RUNNING  MTU:65536  Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

这两个container之间可以连通。

感谢各位的阅读,以上就是"docker如何在不同的Linux机器上实现容器通信"的内容了,经过本文的学习后,相信大家对docker如何在不同的Linux机器上实现容器通信这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

容器 机器 不同 上实 通信 分布式 存储 学习 内容 工具 网络 成功 两个 之间 信息 名字 地址 就是 思路 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中央网信办和国家网信办网络安全 海南商业软件开发代理价钱 扬州waves服务器系统 联想服务器电源响无法启动 mc服务器地址大全 服务器中的节点 天津学生网络技术服务建议 北京绘联网络技术有限公司 建立网络安全管理运维体系 软件开发模型是由谁决定的 极通登录安全服务器 软件开发过程的输入输出 安徽服务器迁移选哪家云主机 软件开发介绍费 质量网络技术开发欢迎咨询 绍兴软件开发驻场需要多少钱 学校网络安全记心间 数据库主从关系 软件开发部年度计划书 游戏开发跟软件开发学那种 查询企业管理者绩效数据库 政法委网络安全知识手册 职中计算机网络技术怎么样 网络安全系统等级分为哪几级 极通登录安全服务器 北京现代软件开发售价 安徽生鲜信息软件开发 沭阳计算机网络技术招聘信息 网络技术给人们带来什么影响 怎样写web服务器
0