我在这里使用了一个非常简单的 docker-compose 文件:
https://github.com/brandonserna/flask-docker-compose
这是 docker compose 文件:
version: '3.5'
services:
flask-app-service:
build: ./app
volumes:
- ./app:/usr/src/app
- .:/user/src
ports:
- 5555:9999
但是,当我使用端口 80 时,我只能从外部网络访问该应用程序。
ports:
- 80:9999
当我使用例如端口 8000 时。我无法从外部网络访问容器。 从本地机器我可以访问该应用程序。 (使用 wget localhost:8000 测试)
ports:
- 8000:9999
iptables -L 给了我这个:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (2 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.18.0.2 tcp dpt:9999
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target prot opt source destination
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
答案 0 :(得分:1)
评论不够所以这就是原因: 从看起来它可能是运行容器的主机中的防火墙规则,也可能是主机到您家之间的防火墙规则。 为了测试两者之间的哪个,我会尝试使用带有 --reason 和 --tracerout 选项的 nmap,因为我们在另一个端口有连接,所以你的家和容器之间不太可能有一个完整的块,所以 traceroute 不会“不提供太多信息,但以防万一。 此外,如果您对主机或 iptables 服务具有 root 访问权限,请尝试停止它以检查这是否是阻止的根本原因。
还要检查 docker ps 端口是否绑定到机器上的端口,应该如下所示:
0.0.0.0:端口 --> tcp\端口
你有端口号而不是端口
如果不是,则可能是由于 docker-compose up 命令存在问题,因此请尝试使用简单的 docker run 命令运行该服务