繁体   English   中英

无法通过端口映射从外部主机访问 docker 容器

[英]cant reach docker container from outside host with port mapping

我在这里使用了一个非常简单的 docker-compose 文件:

https://github.com/brandonserna/flask-docker-compose

这是 docker 撰写文件:

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  

评论还不够,所以这就是原因:从看起来它可能是运行容器的主机中的防火墙规则或主机到您家之间的防火墙规则。 为了测试两者之间的哪一个,我尝试使用带有 --reason 和 --tracerout 选项的 nmap,因为我们在另一个端口有连接,所以你的家和容器之间不太可能有一个完整的块,所以 traceroute 不会t 提供太多信息,但以防万一。 此外,如果您对主机或仅对 iptables 服务具有 root 访问权限,请尝试停止它以检查这是否是阻止的根本原因。

如果端口绑定到机器上的端口,还要检查 docker ps,应该如下所示:

0.0.0.0: 端口 --> tcp\端口

你有端口号而不是端口

如果不是,则可能是由于 docker-compose up 命令存在问题,因此请尝试使用简单的 docker 运行命令运行该服务

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM