我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Docker容器间通信与外网通信的操作

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Docker容器间通信与外网通信的操作

一 容器间通信

1.容器的网络共享

处于这个模式下的docker容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。

使用于web服务器与应用服务器之间的通信。


##清空实验环境
[root@server1 ~]# docker ps -a
CONTAINER ID    IMAGE        COMMAND       CREATED       STATUS       PORTS        NAMES
 
##默认网络创建容器
[root@server1 ~]# docker run -it --name vm1 ubuntu
root@b1a2a90f98a5:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
368: eth0@if369: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
  link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
  inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
    valid_lft forever preferred_lft forever
root@b1a2a90f98a5:/# [root@server1 ~]# 
 
##container创建与vm1 网络共享的vm2
[root@server1 ~]# docker run -it --name vm2 --network container:vm1 ubuntu
root@b1a2a90f98a5:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
368: eth0@if369: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
  link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
  inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
    valid_lft forever preferred_lft forever
root@b1a2a90f98a5:/# 

2.--link方式


##清空镜像
[root@server1 ~]# docker rm -f vm1
vm1
[root@server1 ~]# docker rm -f vm2
vm2
[root@server1 ~]# docker ps -a
CONTAINER ID    IMAGE        COMMAND       CREATED       STATUS       PORTS        NAMES
 
##默认网络创建vm1
[root@server1 ~]# docker run -it --name vm1 ubuntu
root@68e56c57a9a0:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
370: eth0@if371: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
  link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
  inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
    valid_lft forever preferred_lft forever
root@68e56c57a9a0:/# [root@server1 ~]#
 
##--link方式创建vm1子网的容器vm2
[root@server1 ~]# docker run -it --name vm2 --link vm1:web ubuntu
root@61267851b484:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
372: eth0@if373: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
  link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
  inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0    ##ip与vm1同网段,递增
    valid_lft forever preferred_lft forever
 
##解析文件中含有vm1 的ip 与别名等信息
root@61267851b484:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 web 68e56c57a9a0 vm1
172.17.0.3 61267851b484
root@61267851b484:/# ^C
root@61267851b484:/# 

--link

更新hosts文件

link容器的变量也复制过来


root@61267851b484:/# env
HOSTNAME=61267851b484
TERM=xterm
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
HOME=/root
WEB_NAME=/vm2/web
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/env
root@61267851b484:/# 

容器停止 ip将释放掉,开启后重新获取其他ip,link的容器自动更新hosts文件

二 容器与外网间的通信

查看当前iptable的nat表火墙策略


[root@server1 ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target   prot opt source        destination     
DOCKER   all -- 0.0.0.0/0      0.0.0.0/0      ADDRTYPE match dst-type LOCAL
 
Chain INPUT (policy ACCEPT)
target   prot opt source        destination     
 
Chain OUTPUT (policy ACCEPT)
target   prot opt source        destination     
DOCKER   all -- 0.0.0.0/0      !127.0.0.0/8     ADDRTYPE match dst-type LOCAL
 
Chain POSTROUTING (policy ACCEPT)
target   prot opt source        destination     
MASQUERADE all -- 172.26.0.0/24    0.0.0.0/0      
MASQUERADE all -- 172.20.0.0/16    0.0.0.0/0      
MASQUERADE all -- 172.18.0.0/16    0.0.0.0/0      
MASQUERADE all -- 172.17.0.0/16    0.0.0.0/0      
 
Chain DOCKER (2 references)
target   prot opt source        destination     
RETURN   all -- 0.0.0.0/0      0.0.0.0/0      
RETURN   all -- 0.0.0.0/0      0.0.0.0/0      
RETURN   all -- 0.0.0.0/0      0.0.0.0/0      
RETURN   all -- 0.0.0.0/0      0.0.0.0/0  

##创建nginx容器,并映射端口
[root@server1 ~]# docker run -d --name nginx -p 80:80 nginx
cfefe6420cfe60c46cb7a050c142af7eff86fa6d687c3577077a5b4e2c8b961c
 
##开启80端口
[root@server1 ~]# docker port nginx 
80/tcp -> 0.0.0.0:80
 
[root@server1 ~]# netstat -antlp | grep 80
tcp6    0   0 :::80          :::*          LISTEN   27094/docker-proxy 
[root@server1 ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target   prot opt source        destination     
DOCKER   all -- 0.0.0.0/0      0.0.0.0/0      ADDRTYPE match dst-type LOCAL
 
Chain INPUT (policy ACCEPT)
target   prot opt source        destination     
 
Chain OUTPUT (policy ACCEPT)
target   prot opt source        destination     
DOCKER   all -- 0.0.0.0/0      !127.0.0.0/8     ADDRTYPE match dst-type LOCAL
 
Chain POSTROUTING (policy ACCEPT)
target   prot opt source        destination     
MASQUERADE all -- 172.26.0.0/24    0.0.0.0/0      
MASQUERADE all -- 172.20.0.0/16    0.0.0.0/0      
MASQUERADE all -- 172.18.0.0/16    0.0.0.0/0      
MASQUERADE all -- 172.17.0.0/16    0.0.0.0/0      
MASQUERADE tcp -- 172.17.0.2      172.17.0.2      tcp dpt:80
 
Chain DOCKER (2 references)
target   prot opt source        destination     
RETURN   all -- 0.0.0.0/0      0.0.0.0/0      
RETURN   all -- 0.0.0.0/0      0.0.0.0/0      
RETURN   all -- 0.0.0.0/0      0.0.0.0/0      
RETURN   all -- 0.0.0.0/0      0.0.0.0/0      
DNAT    tcp -- 0.0.0.0/0      0.0.0.0/0      tcp dpt:80 to:172.17.0.2:80
[root@server1 ~]# 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Docker容器间通信与外网通信的操作

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

docker容器与容器之间怎么通信

Docker容器与容器之间有多种通信方式,以下是一些常用的方法:使用Docker网络:Docker提供了多种网络模式,包括桥接网络、主机网络和容器网络等。可以在创建容器时选择特定的网络模式,使得容器可以直接通过IP地址进行通信。使用Dock
docker容器与容器之间怎么通信
2024-02-29

docker容器之间通信的示例分析

这篇文章将为大家详细讲解有关docker容器之间通信的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。容器之间的通信 # 执行一个容器,并分配一个名字给它 $ docker run -d -na
2023-06-17

docker容器间通信的方法是什么

Docker容器间通信的方法有以下几种:使用容器名称或ID进行通信:每个Docker容器都有一个唯一的名称或ID,可以使用这个名称或ID来进行容器间的通信。例如,可以使用容器名称作为主机名在容器之间进行通信。使用Docker网络进行通信:D
2023-10-25

Docker容器化Linux应用的容器间安全通信

Docker容器化Linux应用的容器间安全通信是一个重要的问题,以下是一些建议来实现容器间的安全通信:使用Docker网络:Docker提供了一个名为Docker网络的功能,它允许容器之间进行通信。你可以创建一个自定义的Docker网络,
Docker容器化Linux应用的容器间安全通信
2024-10-07

Linux下Docker容器间通信机制探讨

在Linux下,Docker容器间通信有多种方式,这里主要探讨三种常用的通信机制:网络模式、Docker网络以及宿主机IP和端口映射网络模式(Network Mode)Docker支持四种网络模式,分别是:bridge(桥接)、host(宿
Linux下Docker容器间通信机制探讨
2024-10-06

如何进行Docker容器之间的通信的方法实现

如何进行Docker容器之间的通信的方法实现,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。情景:本地已经搭建laradock开发环境(php7.3+mysql5.7),现在
2023-06-22

Linux操作系统 进程之间的通信

进程之间的通信预备知识:1、用户态和内核态,当一个进程在执行用户自己的代码时处于用户运行态(用户态);当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态)。2、进程之间的通信(Inter Processs Communica
2023-06-05

Ubuntu Spark集群的容器间通信优化

Ubuntu Spark集群的容器间通信优化是一个复杂的过程,涉及到多个方面,包括网络配置、资源分配、数据传输等。以下是一些建议,可以帮助你优化Spark集群中容器间的通信:使用高性能网络:确保Spark集群中的所有节点都使用高性能的网络接
Ubuntu Spark集群的容器间通信优化
2024-10-22

利用overlay怎么实现docker容器间跨宿主机通信

这期内容当中小编将会给大家带来有关利用overlay怎么实现docker容器间跨宿主机通信,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。overlay网络解析内置跨主机的网络通信一直是Docker备受期待
2023-06-06

Android IPC进程间通信详解最新AndroidStudio的AIDL操作)

前言前面梳理了Android的线程间的通信《Thread、Handler和HandlerThread关系何在?》 ,这些都是在同一个进程中,那进程间的通信,或者说不同的应用间的通信该如何实现呢?这个时候就要用到AIDL(Android In
2022-06-06

分时操作系统如何处理进程之间的通信?

分时操作系统通过各种机制处理进程之间的通信,包括管道、信号、共享内存和消息队列,从而允许进程安全高效地进行数据交换和同步。
分时操作系统如何处理进程之间的通信?
2024-03-05

编程热搜

目录