Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker 容器已经运行的情况下,如何对外暴露端口

Docker 容器已经运行的情况下,如何对外暴露端口

作者头像
somenzz
发布于 2024-04-01 02:28:45
发布于 2024-04-01 02:28:45
3.3K00
代码可运行
举报
文章被收录于专栏:Python七号Python七号
运行总次数:0
代码可运行

运维时,你可能会遇到这样的问题,那就是Docker 容器已经运行的情况下,我希望宿主机外的程序,比如数据库客户端,能够连接容器内部的端口,如数据库端口。

一旦 Docker 容器已经运行起来后,原则上是不能直接修改容器配置来新增端口的。Docker 容器的端口映射是在启动容器时通过 -p 或者 --publish 参数来设置的,一旦设置好并且容器运行起来后,这些设置就固定下来了。

不过,如果你需要在已经运行的容器对外暴露新的端口,有一些间接的方法可以尝试:

  1. 使用 docker commit 命令创建一个新的镜像,然后基于这个新的镜像启动一个新的容器,并在启动时指定需要暴露的端口。但这样就不是原来的容器了,数据可能不是实时更新的。
  2. 可以通过 iptables 等工具在宿主机上手动设置端口转发规则,将流量重定向到容器的端口。
  3. 使用 Docker 的网络功能,如创建一个新的网络桥接或者使用 docker network connect 将容器连接到另一个网络接口,这样可以在不重启容器的情况下改变网络设置。

这里分享下方法 2 的具体做法:如何在宿主机上使用 iptables 设置端口转发规则可以将外部请求转发到 Docker 容器的端口上。

基本的步骤:

1、确保 IP 转发已开启:要让 iptables 能够进行端口转发,你需要确认宿主机已经开启了 IP 转发功能。可以通过以下命令查看和开启:

查看 IP 转发是否开启:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sysctl net.ipv4.ip_forward

如果结果为 0,说明 IP 转发功能没有开启,你可以通过以下命令临时开启 IP 转发:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo sysctl -w net.ipv4.ip_forward=1

要永久开启 IP 转发,在 /etc/sysctl.conf 文件中设置 net.ipv4.ip_forward=1,然后重新加载配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo sysctl -p /etc/sysctl.conf

2、设置 NAT 转发规则:使用 iptables 命令设置 NAT 转发规则,将宿主机上的端口转发到容器的端口上。以下是一个 iptables 命令的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo iptables -t nat -A PREROUTING -p tcp --dport < 宿主机端口 > -j DNAT --to-destination < 容器 IP>:< 容器端口 >

例如,如果你想将宿主机的 8080 端口转发到容器的 80 端口,且容器的 IP 是 172.17.0.2,可以使用以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 172.17.0.2:80

3、设置过滤规则:为了确保转发的数据包能够被正确处理,你可能还需要添加一条规则来允许经过宿主机的转发流量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo iptables -A FORWARD -p tcp -d < 容器 IP> --dport < 容器端口 > -j ACCEPT

使用上面的例子,命令将会是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo iptables -A FORWARD -p tcp -d 172.17.0.2 --dport 80 -j ACCEPT

4、保存规则:在某些 Linux 发行版中,iptables 规则在重启后不会自动保存。你可以使用 iptables-save 和 iptables-restore 命令来保存和重载规则。对于 Debian/Ubuntu 系统,可以安装 iptables-persistent 包来保存规则。

在执行这些命令时,请特别小心,因为 iptables 的配置错误可能会导致网络服务中断。如果你不熟悉 iptables,建议在测试环境中先进行实验。

如果不嫌麻烦,你还可以在 GitHub 下载一个 gost 来进行端口转发,这个工具我认为是最强转发工具,没有之一。

上述方法并不是直接通过修改现有运行容器来实现的,而是通过一些外部操作或容器重建来实现端口暴露的目的。如果你希望对外暴露端口,建议在设计 Docker 容器时提前规划好端口映射。

最后,好久没更新了,如果本文有帮助,欢迎收藏、关注、转发。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker 容器如何访问外部网络以及端口映射原理?
不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树
山河已无恙
2024/04/11
3.8K0
Docker 容器如何访问外部网络以及端口映射原理?
一步步搭建内外网互联:SNAT 和 DNAT 实战教程
最近在学习网络技术时,我对内外网互联的实际应用非常感兴趣,尤其是如何通过 SNAT 和 DNAT 来解决内网访问外网和外网访问内网的问题。为了更好地理解这些概念,我决定亲自动手搭建一个实验环境。这个过程既充满挑战,也让我收获满满。如果你也对网络技术感兴趣或者正在学习 NAT 技术,那么这篇文章一定会对你有所帮助!
神秘泣男子
2024/12/29
3810
一步步搭建内外网互联:SNAT 和 DNAT 实战教程
Docker容器内部端口映射到外部宿主机端口的方法小结
Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。 容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。
洗尽了浮华
2018/08/22
6.7K0
利用Linux中的iptables进行网络代理配置
作为资深爬虫技术员,爬虫需要爬虫IP池介入这是众所周知的。今天我将用我毕生所学,谈谈linux中使用iptables工具来进行网络配置,并通过linux系统创建属于自己的ip库池,如有错误望各位大佬指正。
华科云商小徐
2023/11/30
1K0
Linux端口转发的几种常用方法
在一些实际的场景里,我们需要通过利用一些端口转发工具,比如系统自带的命令行工具或第三方小软件,来绕过网络访问限制触及目标系统。
Bypass
2020/08/27
52.5K0
Iptables NAT:实现网络中转
在本文中,我们将深入解析iptables NAT(网络地址转换)的功能,以及如何使用它进行网络中转。我们会详细解释NAT中使用的PREROUTING、POSTROUTING和OUTPUT链的含义,介绍如何配置DNAT(目标网络地址转换)和SNAT(源网络地址转换),并在内网场景中演示这些概念。最后,我们将阐述如何持久化iptables配置,以保证在重启后仍然生效。
ppxai
2023/11/18
2.6K0
Iptables NAT:实现网络中转
【Linux】防火墙iptables详解
回答:为了能够最快速的筛掉不必要的数据包,我们的拒绝规则肯定是要放在前面的,接受的放在后面。
青衫哥
2024/04/03
4K1
【Linux】防火墙iptables详解
你有普通用户使用特权端口 (1024 以下) 的需求吗,或许这篇文章能帮你彻底解决!
众所周知,在 Linux 系统下,只允许 Root 用户运行的程序才可以使用特权端口 ( 1024 以下的端口 )。如果在普通用户下使用特权端口将会报错。
iMike
2019/10/24
9.4K0
你有普通用户使用特权端口 (1024 以下) 的需求吗,或许这篇文章能帮你彻底解决!
防火墙之地址转换SNAT DNAT
1、原理:在路由器后(PSOTROUTING)将内网的ip地址修改为外网网卡的ip地址。
拓荒者
2019/03/15
3.2K0
防火墙之地址转换SNAT DNAT
Phantun:一款功能强大的轻量级UDP转TCP混淆工具
Phantun是一款功能强大的轻量级UDP转TCP混淆工具,该工具可以将UDP数据包混淆成TCP连接,旨在以最小的处理和封装开销实现最大的性能。该工具通常用于UDP被阻止/限制但TCP被允许通过的环境。
FB客服
2022/06/08
5.9K0
Phantun:一款功能强大的轻量级UDP转TCP混淆工具
面试官:如何将多个容器暴露到一个端口上?问倒一大片。。。
富 Web 时代,应用变得越来越强大,与此同时也越来越复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁。
民工哥
2023/11/07
1.9K0
面试官:如何将多个容器暴露到一个端口上?问倒一大片。。。
Linux-Iptables-Memcached实现内网转发连接
服务器A设置路由转发并通过iptables进行端口转发,服务器B上开启memcached服务,使访问服务器A可以连接到服务器B的memcached服务
指剑
2022/07/15
8130
Linux-Iptables-Memcached实现内网转发连接
使用iptables进行端口转发
说明:玩vps的经常要用到端口转发用以实现更快的速度,比如手上有个某商家的vps,本地访问速度很慢,这时候就可以用一个香港或者日本的线路做桥梁,达到更快的速度,这里先说下用iptables来进行中转的教程,毕竟自认为这个是最好上手的。
用户8851537
2021/07/23
9.9K0
Zabbix对Windows Server的监控
这里的windows server2012环境使用的是esxi虚拟机,由于上公网的ip不够用,这里我做了nat,但esxi不支持nat网络,所以我使用iptables在zabbix server上实现了端口转发以及共享上网
没有故事的陈师傅
2019/09/12
4.6K0
Zabbix对Windows Server的监控
[Linux]iptables 端口转发
Windows的端口转发,我们可以 点击这里 直达。但是我们今天的需求是用我们的linux转发来加速我们在美国的windows。所以我们设定的案例如下
用户2353021
2020/05/12
3.7K0
网关服务器iptables的SNAT与DNAT地址转换
SNAT(Source Network Address Translation 源地址转换)是Linux防火墙的一种地址转换操作,也是iptables命令中的一种数据包控制类型,其作用是根据指定条件修改数据包的源IP地址。 DNAT(Destination Network Address Translation 目标地址转换)是Linux防火墙的另一种地址转换操作,同样也是iptables命令中的一种数据包控制类型,其作用是可以根据指定条件修改数据包的目标IP地址和目标端口。
星哥玩云
2022/07/14
2.1K0
网关服务器iptables的SNAT与DNAT地址转换
容器化之路Docker网络核心知识小结,理清楚了吗?
  Docker网络是容器化中最难理解的一点也是整个容器化中最容易出问题又难以排查的地方,加上使用Kubernets后大部分人即使是专业运维如果没有扎实的网络知识也很难定位容器网络问题,因此这里就容器网络单独拿出来理一理。
欢醉
2021/10/19
6530
iptables之NAT端口转发设置
背景: 服务器A:103.110.114.8/192.168.1.8,有外网ip,是IDC的一台服务器 服务器B:192.168.1.150,没有外网ip,A服务器是它的宿主机,能相互ping通 服务器C:192.168.9.120,是公司的一台服务器,能上网。 服务器C可以直接ssh登陆A服务器,但是不能直接登陆服务器B,因为它们处在两个不同的局域网内。 现在要求能从服务器C上ssh登陆服务器B,并且做ssh无密码信任跳转关系。 这就需要用到iptables的NAT端口转发功能了~~~~~ 思路: 让服务
洗尽了浮华
2018/01/22
3.7K0
手工模拟实现 Docker 容器网络!
如今服务器虚拟化技术已经发展到了深水区。现在业界已经有很多公司都迁移到容器上了。我们的开发写出来的代码大概率是要运行在容器上的。因此深刻理解容器网络的工作原理非常的重要。只有这样将来遇到问题的时候才知道该如何下手处理。
开发内功修炼
2022/03/24
8430
手工模拟实现 Docker 容器网络!
Linux本机端口转发配置
所谓端口转发就是,本来你的进程是提供端口A的TCP服务,但是由于一些特殊原因(比如该端口禁止外网访问,或者金志明某些用户访问),如果还是想要访问到该端口A的服务,可以配置一下端口转发,使得到端口B的请求被自动转发到端口A,而端口B是可以访问的,从而也就实现了对端口A服务的访问。
Cloudox
2021/11/23
4.4K0
Linux本机端口转发配置
相关推荐
Docker 容器如何访问外部网络以及端口映射原理?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验