我有一个暴露给*:8080
的Docker服务容器。
localhost:8080
访问该容器。 Chrome / curl
无限期挂起。127.0.0.1
这让我不寒而栗,因为在我的hosts
文件中,localhost
重定向到127.0.0.1
。
为什么会这样? IPv4 / IPv6双协议栈是否以某种方式相关?
我正在使用启用了Docker Swarm的PopOS(基于Ubuntu)。
我正在使用此测试堆栈文件traefik.docker-compose.yml
:
version: '3'
services:
reverse-proxy:
image: traefik # The official Traefik docker image
command: --api --docker # Enables the web UI and tells Traefik to listen to docker
ports:
- "80:80" # The HTTP port
- "8080:8080" # The Web UI (enabled by --api)
volumes:
- /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
要运行堆栈,我使用:
docker stack deploy -c traefik.docker-compose.yml traefik
服务启动后,我确认它正在通过两种方式监听8080
:
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
4ejfsvenij3p traefik_reverse-proxy replicated 1/1 traefik:latest *:80->80/tcp, *:8080->8080/tcp
sudo ss -pnlt | grep 8080
LISTEN 3 128 *:8080 *:* users:(("dockerd",pid=2119,fd=45))
作为参考,这是我的/etc/hosts
的内容:
127.0.0.1 localhost
::1 localhost ipv6-localhost
127.0.1.1 pop-os.localdomain pop-os pop1810x220
我只使用curl
进行测试:
curl http://127.0.0.1:8080
curl http://localhost:8080
答案 0 :(得分:0)
尝试在正在运行的容器中编辑/ etc / hosts,以删除第二行的“ localhost”引用,该引用位于第二行,并在“ :: 1”之后跟随一些空格,以便读取:
:: 1 ipv6-localhost