docker宿主机上的端口无法对外提供服务

因为特殊要求有个服务需要配置到宿主机上,所以引发了以下这个问题。

实验:
容器中安装Tomcat,映射到宿主机为6666。

宿主机中也安装Tomcat,端口为8080。

端口使用netstat查看全部开启。

浏览器:访问容器中Tomcat 端口6666 访问成功 , telnet 6666端口成功
              访问宿主机Tomcat 端口8080 访问失败 , telnet 8080端口失败

排错分析:
说明宿主机8080端口对外是关闭的,而又想到宿主机ssh端口22为什么是对外可以通信呢?

想到docker宿主机--容器--外网这三点通信都是通过宿主机的iptables nat去做的转换,所以怀疑应该是iptables的问题!

# iptables-save > q.txt

# cat q.txt

-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
果然在宿主机的规则连中有,插入了开放本机端口的规则。

解决:

cat q.txt

# -A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
# -A IN_public_allow -p tcp -m tcp --dport 8080 -m conntrack --ctstate NEW -j ACCEPT

iptables-restore <q.txt

访问宿主机8080端口成功。

时间: 2024-10-15 04:48:50

docker宿主机上的端口无法对外提供服务的相关文章

docker技术剖析--docker网络(二)docker宿主机之间容器互通

http://hongge.blog.51cto.com/ 多台物理主机之间的容器互联(暴露容器到真实网络中) docker 默认的桥接网卡是 docker0 .它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 vethxxx,而 docker 只是把所有这些网卡桥接在一起,如下: 这样就可以把这个网络看成是一个私有的网络,通过 nat 连接外网,如果要让外网连接到容器中,就需要做端口映射,即 -p 参数. 如果在企业内部应用,或则做多个物理主机的集群,可能需要将多个物理

docker 容器网络绑定端口部署

docker网络基础 一. 1. 默认情况下容器可以建立到外网网络的链接但是外网网络无法连接到容器 docker允许通过外部访问容器或容器互联的方式来提供网络服务 外部访问容器可以在容器中运行网络应用可以通过-p 或 -P参数来指定端口隐射. -P:默认指定端口  -p自定义指定端口 2.dicker容器启动时会在宿主机上创建一个名为docker0的虚拟网络接口docker启动       一个容器时会根据docker0的网段划分容器的ip.每个docker容器是docker0的网关从     

gitlab的docker安装,非标准端口,如何处理?

这个问题的定义是: 如果我们不是用的80端口对外提供服务, 但gitlab的docker容器里的nginx却是80端口, 那么,在我们clone代码时,带的Http地址也会是80端口,这显然会出现问题, 特别是在作GITLAB的CI/CD时. 套装的修改方法如下: 一,gitlab.sh(启动docker的文件) docker run -d --hostname www.xxx.com -p 9443:443 -p 8888:8888 -p 9022:22 --name gitlab --res

使用iptables为docker容器动态添加端口映射

1.将当前iptables的配置写入保存到/etc/sysconfig/iptables 2.保存 /etc/init.d/iptables sava 3.修改iptables配置(vi /etc/sysconfig/iptables): 在适当位置增加下面红色的三行,然后重启iptables即可.(30612 是容器对外提供服务的端口) -A FORWARD -i docker0 -o docker0 -j ACCEPT -A DOCKER -d 172.17.0.10/32 ! -i doc

如何在宿主机上执行容器里的jmap,jtack,jstat 命令获取信息(原创)

一般情况下,我们要获取docker容器里的jvm信息只能进入容器后执行jmap,jstack,jstat 命令去获取,jstack,jstat还好,但是jmap dump的文件要拿出来,得先copy dump文件到挂载在宿主机上的目录,或者使用docker cp命令去获取, 如  https://pathtogeek.com/thread-heap-dumps-from-a-docker-container 1. Run the below command to bash into the co

在Ubuntu宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,类似于PC上的ldd命令

在电脑上安装的Linux系统中,有一个ldd命令,可以查看对应的可执行文件或库文件依赖哪些库,但可执行文件或库文件要求与操作系统的编译器类型相同,即电脑是X86的GCC编译器,那么无法通过ldd命令查看ARM交叉编译器编译出来的可执行文件或库文件. 如果想在Ubuntu等Linux宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,可以通过以下命令: [email protected]:$ arm-linux-readelf  -a  busybox |grep "Shared&qu

fsck 修复宿主机上面挂掉的虚拟机

一.情况详解 有些时候宿主机突然挂掉,会造成有些虚拟机 启动失败,如下图所示 这应该是文件系统破坏的问题,一般情况下还可以在虚拟机中fsck修复文件系统,但是这种情况在虚拟机中根本就没有机会fsck,所以想到通过外界方法对虚拟磁盘进行fsck.创建虚拟机使用的虚拟磁盘的类型是qcow2,开机无法fsck的话,可以通过如下两种方式 1.通过启动其它虚拟机的时候指定损坏虚拟磁盘启动再修复 2.通过qemu-nbd工具本地宿主机上修复qcow2 这里介绍第二种方式,直接在宿主机上修复损坏qcow2磁盘

如何在宿主机上查看kvm虚拟机的IP

背景介绍:由于公司进行固定资产清查,动了我的服务器.导致禅道不能正常连接 故障现象:我找到禅道那台服务器,接上显示器,发现里面居然跑了6台kvm的虚拟机(不是本人搭建的哈).我擦,我需要的禅道到底在哪台虚拟机上呢? 解决步郰: 1.virsh --list(查看有哪些服务器) 2.virsh dumpxml 虚拟机名称 查看服务器对应的mac地址 3.然后再宿主机上arp -a 查看对应的mac地址对应的ip 如果arp -a看不到想要的结果,就写个脚本ping一下同网段的所有IP

重启服务器后Docker容器暴露的端口外网突然访问不了!!

*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !important; } .markdown-body a:not([href]) { color: inherit; text-decoration: none; } .markdown-body .anchor { float: left; padding-right: 4px; margin-left: -2