正如标题所述,我遇到了一个奇怪的问题,我可以通过127.0.0.1而不是通过localhost访问我的服务。应该容易复制,因为我所做的只是:
初始化了一个仅用于测试的新群:sudo docker swarm init --advertise-addr 127.0.0.1
127.0.0.1
,因为不允许使用localhost
或0.0.0.0
使用此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:3000
或0.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
。