使Docker提供对外服务的网络配置(桥接与端口)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

前沿:

        docker 启动容器后,如何对外服务?   希望大家看了这篇文章后有些帮助。 


docker的有关网络问题没怎么搞清楚,请教了下邓磊同学,感谢 !


Docker生成的容器,一般会给你生成一个ip地址,这个ip地址是和docker0的地址是一个ip段的。


通过ip a命令 ,咱们可以看到docker0的ip和子网的范围 。 大家会发现除了docker0 还有一个vethc 数字的网卡,这个也算是虚拟网卡绑在桥接上的。

wKiom1PsaNfirzmfAAU8lwiyqYc483.jpg


我们创建一个容器,并且暴露22端口。 这个22端口的意思是对外暴露了22端口,系统会从49000-49900端口范围内给你分配一个端口。



docker run 指明端口有两种的方式,一种是-P ,他是识别容器里的dockerfile声明的端口关系。 还有一个是-p 这个是小屁屁,他就可以直白点了。  比如 -p  6379,是对外暴露了6379。   6379:6379 是外面是6379,里面也是6379 。

原文:http://rfyiamcool.blog.51cto.com/1030776/1540074


root@dev-ops:~# docker run -d  -p 22 --name="redis_test" rastasheep/ubuntu-sshd 

ed7887b93aa452323ee96339d889bebc36ad25a479c660ba89e97d2c5869f105

root@dev-ops:~# 

root@dev-ops:~# docker ps -a

CONTAINER ID        IMAGE                           COMMAND             CREATED             STATUS              PORTS                   NAMES

ed7887b93aa4        rastasheep/ubuntu-sshd:latest   /usr/sbin/sshd -D   7 seconds ago       Up 7 seconds        0.0.0.0:49153->22/tcp   redis_test          

root@dev-ops:~# 

原文:http://rfyiamcool.blog.51cto.com/1030776/1540074

wKioL1PsaqiC9a-XAAdUMGvZeLM044.jpg


原来我以为docker是写了一个socker做了端口的映射功能,看文档才知道,他就是调用了一个 iptable的端口映射。 

iptables -t nat -L

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
原文:http: //rfyiamcool .blog.51cto.com /1030776/1540074
Chain PREROUTING (policy ACCEPT)
target     prot opt  source                destination         
DOCKER     all  --  anywhere             anywhere             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  --  anywhere            !127.0.0.0 /8           ADDRTYPE match dst- type  LOCAL
 
Chain POSTROUTING (policy ACCEPT)
target     prot opt  source                destination         
MASQUERADE  all  --  localhost /16         !localhost /16        
 
Chain DOCKER (2 references)
target     prot opt  source                destination         
DNAT       tcp  --  anywhere             anywhere             tcp dpt:49153 to:172.17.0.2:22
root@dev-ops:~ #


有主机的ip,和容器的ip,那你还怕啥 !  想映射什么,自己映射。


1
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 172.31.0.23:80


docker之间的容器默认是互通的,也就是两个容器可以互相的通信。 如果想控制容器之间的通信,可以利用 docker  的 --icc 属性控制。


wKioL1Psd2HwJdOfAAQ3awyJ1Gg532.jpg


原文:http://rfyiamcool.blog.51cto.com/1030776/1540074


好了,我们在说下桥接的方式。 如果你觉得麻烦,每次都需要做端口的映射,或者是修改映射,那你可以考虑下用桥接网卡的模式。 貌似一些论坛上的牛人不太推荐用桥接,估计是为了安全的问题。  毕竟nat的话,对外是安全的,对外的服务也只是暴露出端口而已。  而桥接的话,会暴露ip出去。 


原文:http://rfyiamcool.blog.51cto.com/1030776/1540074

暂停docker服务

sudo service docker stop


用ip命令使docker0网卡down掉

sudo ip link set dev docker0 down


删除网卡

sudo brctl delbr docker0


创建一个网卡 名字是bridge0

sudo brctl addbr bridge0


ip地址和子网

ip addr add 192.168.5.1/24 dev bridge0


启动桥接网卡

sudo ip link set dev bridge0 up


写入配置

echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker


sudo service docker start


这样的桥接方式有个问题就是,他的ip是docker自己检测搞给你的,貌似不是dhcp获取空闲的,然后赋予给容器的。我昨天再次做测试的时候,有一个ip被占用的,但是他还是分喷给了一个被占用的ip地址。 这样的话就冲突了。 如果ip端和公司内部或者是线上重叠的话,可能会造成ip地址的冲突。 桥接后遇到ip地址冲突是个人结论 ,也可能是我这边环境导致的这类问题!




 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1540074,如需转载请自行联系原作者


相关实践学习
基于ACK Serverless轻松部署企业级Stable Diffusion
本实验指导您在容器服务Serverless版(以下简称 ACK Serverless )中,通过Knative部署满足企业级弹性需求的Stable Diffusion服务。同时通过对该服务进行压测实验,体验ACK Serverless 弹性能力。
目录
打赏
0
0
0
0
348
分享
相关文章
从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
54 8
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
本文介绍了如何通过网络穿透技术让公网直接访问家庭电脑,充分发挥本地硬件性能。相比第三方服务受限于转发带宽,此方法利用自家宽带实现更高效率。文章详细讲解了端口映射教程,包括不同网络环境(仅光猫、光猫+路由器)下的设置步骤,并提供实时同步动态IP的两种方案:自建服务器或使用三方API接口。最后附上VM虚拟机全版本下载链接,便于用户在穿透后将服务运行于虚拟环境中,提升安全性与适用性。
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
259 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
【Azure APIM】APIM服务配置网络之后出现3443端口不通,Management Endpoint不健康状态
如果没有关联的网络安全组,则阻止所有网络流量通过子网和网络接口。
110 30
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
132 7
公共云网络安全即服务!阿里云稳居市占率第一!
公共云网络安全即服务!阿里云稳居市占率第一!
计算机端口:网络通信的桥梁
计算机端口是网络通信的逻辑通道,支持数据传输和服务识别。本文介绍端口定义、分类(知名、注册、动态端口)、作用及管理方法,涵盖常用知名端口如HTTP(80)、HTTPS(443)等,并强调端口安全配置的重要性,帮助读者全面理解这一关键组件。
173 6
|
5月前
|
docker的默认网络模式有哪些
Docker 默认网络模式包括:1) bridge:默认模式,各容器分配独立IP,可通过名称或IP通信;2) host:容器与宿主机共享网络命名空间,性能最优但有安全风险;3) none:容器隔离无网络配置,适用于仅需本地通信的场景。
143 6
云服务器怎么开启被关闭的端口?手把手教你开启端口
在使用云服务器时,若发现某些服务无法访问,可能是端口被关闭。本文介绍了端口关闭的原因、检查方法及开启步骤。原因包括初始设置限制、防火墙规则和外部网络策略;可通过netstat或ss命令检查端口状态,用ufw、iptables或firewalld调整防火墙规则。最后提供了解决常见问题的建议,确保端口正常开放并可供外网访问。
321 9
云服务器常用端口作用
了解云服务器常用端口的作用有助于高效管理资源、快速定位问题及更好地使用云服务。常见端口包括:21(FTP,文件传输)、22(SSH,远程连接Linux)、25(SMTP,发送邮件)、80(HTTP,网页服务)、110/143(POP3/IMAP,接收邮件)、443(HTTPS,加密网页)、1433(SQL Server)、3306(MySQL)、3389(RDP,远程访问Windows桌面)和8080(代理服务)。
87 2