使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 弹性能力。
相关文章
|
20天前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
152 61
|
2月前
|
人工智能 文件存储 开发者
通过Infortress 端口穿透功能访问内网电脑部署的HTTP服务
在远程办公或跨地域协作中,访问内网HTTP服务是技术工程师的常见需求。借助Infortress的端口穿透功能,无需复杂配置即可实现外网访问。本文以Mac电脑为例,通过Python搭建简单HTTP服务,并使用Infortress完成端口穿透配置。具体步骤包括检查Python版本、启动HTTP服务、安装并配置Infortress客户端、获取代理信息及测试外网访问。同时提醒注意安全性与网络稳定性,确保端口合理设置和及时关闭。Infortress简化了内网穿透流程,适合开发者与IT管理员高效协作。
|
2月前
|
网络协议 安全 Devops
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
70 4
|
3月前
|
机器学习/深度学习 人工智能 安全
从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
87 8
|
5月前
|
NoSQL MongoDB 数据库
使用 docker 快速搭建开发环境的 mongodb 服务
本指南介绍如何使用 Docker 和 Docker Compose 部署 MongoDB 和 Mongo Express。首先,通过 Docker 命令分别启动 MongoDB(镜像 `mongo:7.0.14`)和 Mongo Express(镜像 `mongo-express:1.0.2-20-alpine3.19`),并配置环境变量确保两者能正确连接。接着,提供了一个 `docker-compose.yaml` 文件示例,包含 MongoDB 数据卷、健康检查及服务依赖配置,简化多容器管理。
651 2
|
5月前
|
网络协议 Java Shell
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-优雅草卓伊凡解决方案
200 7
|
6月前
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
343 19
|
5月前
|
云安全 人工智能 安全
公共云网络安全即服务!阿里云稳居市占率第一!
公共云网络安全即服务!阿里云稳居市占率第一!
|
7月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
177 17
|
7月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
131 10