我在RedHat 8中运行docker容器。在我的docker容器中,我公开了8080端口,以便从外部访问。我可以从其他服务器远程登录8080,但无法通过IP地址从主机服务器远程登录8080。
[root@redhat1 biz]# cat docker-compose.yml
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
links:
- php
php:
image: php:7-fpm

无法使用IP地址从主机服务器访问暴露的端口8080。它可以通过本地主机或127.0.0.1远程登录8080。

可以通过IP地址从其他服务器Telnet 8080。

发布于 2021-06-07 19:47:28
检查主机服务器在firewalld上的防火墙设置,了解端口8080的传入。
您可能需要修改主机上的iptables规则,以允许来自Docker容器的连接。下面这样的代码将会起到作用:
iptables -A INPUT -i docker0 -j ACCEPT这将允许从Docker容器访问主机上的任何端口。
iptables规则是有序的,此规则可能会执行,也可能不会执行,这取决于之前出现的其他规则。
您将只能访问正在侦听INADDR_ANY (例如0.0.0.0 )或显式侦听docker0接口的主机服务。
发布于 2021-10-25 15:17:45
本地生成的数据包不会通过NAT PREROUTING,这是大多数“转发端口”(DNAT)实现添加规则的地方。这解释了您尝试使用来自不同服务器的公共IP地址的原因。
通过使用NAT输出链,可以使本地主机情况正常工作。我希望docker也会为这种情况添加一个规则。
例如,docker可能有这样的规则:
# iptables -t nat -A OUTPUT -p tcp --dst 127.0.0.1 --dport 8080 -j REDIRECT --to-ports 80可能缺少的是一个与您的公共IP地址相匹配的类似规则。这是有问题的,因为规则需要知道您的公网IP。这可能解释了为什么docker不生成这个规则。
# iptables -t nat -A OUTPUT -p tcp --dst a.b.c.d --dport 8080 -j DNAT --to-destination 127.0.0.1:80默认情况下,Firewalld不会阻止输出数据包。除非你自己做了改变,否则我认为这不太可能是原因。暂时禁用它将是验证这一点的一种快速方法。
https://stackoverflow.com/questions/67865445
复制相似问题