Проблема
У меня есть служебный контейнер Docker, доступный для *:8080
.
- Я не могу получить доступ к контейнеру через
localhost:8080
.Chrome / curl
зависает на неопределенное время. - Но я могу получить доступ к контейнеру, если использую любой другой локальный IP-адрес, такой как
127.0.0.1
Это сбивает меня с толку, потому что вмой hosts
файл localhost
перенаправляет на 127.0.0.1
.
Почему это происходит?И связано ли это как-то с двойным стеком IPv4 / IPv6?
Среда
Я нахожусь на PopOS (на основе Ubuntu) с включенным Docker Swarm.Я использую этот файл тестового стека, 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