服务可以通过127.0.0.1到达,但不能通过Localhost

时间:2020-09-08 20:46:09

标签: docker networking docker-swarm

正如标题所述,我遇到了一个奇怪的问题,我可以通过127.0.0.1而不是通过localhost访问我的服务。应该容易复制,因为我所做的只是:

  1. 初始化了一个仅用于测试的新群:sudo docker swarm init --advertise-addr 127.0.0.1

    • 我使用了127.0.0.1,因为不允许使用localhost0.0.0.0
  2. 使用此docker compose文件在端口3000上部署了一个包含静态服务器的新堆栈:

    version: '3'
    
    services:
      app:
        image: python:3.7
        command: bash -c "python -m http.server 3000"
        ports:
          - "3000:3000"
    

现在,我可以使用127.0.0.1:30000.0.0.0:3000正常访问服务器,但是localhost:3000只是超时。这似乎违反直觉,因为据我所知,由于我的主机文件,localhost应该自动解析为127.0.0.1

我非常确定我的主机文件很好,因为如果我部署一个独立的容器,例如sudo docker run -d -p 8080:8080 trinitronx/python-simplehttpserver,则可以通过本地主机访问它。

其他信息

这一切都在Fedora 32上运行。这是我的主机文件:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

这是sudo docker service list的输出:

ID              NAME              MODE           REPLICAS    IMAGE           PORTS
673bliylh292    temp-stack_app    replicated     1/1         python:3.7      *:3000->3000/tcp

运行sudo docker network inspect ingress时,我可以看到我的IP管理(IPAM)具有子网10.0.0.0/24和网关10.0.0.1,并且网络列出了IP {{1}上的单个对等方}。如有必要,我可以提供完整的输出。如果有帮助的话,我也可以提供我的码头工人127.0.0.1

0 个答案:

没有答案