Контейнер Docker не доступен через localhost, но доступен через 127.0.0.1 - PullRequest
0 голосов
/ 25 февраля 2019

Проблема

У меня есть служебный контейнер 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 двумя способами:

  1. 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
...