Контейнеры Docker работают, но не могут получить к ним доступ - PullRequest
0 голосов
/ 05 января 2019

Я изучаю докер и начал с Официальное руководство по началу работы .

Моя проблема на шаге 3.

Вот мой файл docker-compose.yml (такой же, как в учебнике)

version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: username/repo:tag
deploy:
  replicas: 5
  resources:
    limits:
      cpus: "0.1"
      memory: 50M
  restart_policy:
    condition: on-failure
ports:
  - "4000:80"
 networks:
  - webnet

Я следовал инструкциям в ссылке . Единственное, что отличалось, когда я запустил docker swarm init и получил этот ответ Ошибка ответа от демона: не удалось выбрать IP-адрес для рекламы, поскольку эта система имеет несколько адресов на разных интерфейсах (10.0.2.15 на eth0 и 192.168 .99.100 на eth1) - укажите один с --advertise-addr Я запустил docker swarm init --advertise-addr=192.168.99.100, так как это IP-адрес, команда docker-machine ip default возвращает

Проблема Все 5 реплик контейнеров запущены и работают, но я не могу получить доступ к приложению 192.168.99.100:4000. Что не так?

Вот что я получаю сейчас Результаты отладочных команд

Примечания:

  • Использование Docker Toolbox для Windows (Windows 10 Home)
  • Я попробовал команду docker swarm init --advertise-addr=192.168.99.100 listen-addr=192.168.99.100 тоже

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Оказалось, что-то не так с самой докер-машиной. После воссоздания все заработало нормально.

Надеюсь, это кому-нибудь поможет

0 голосов
/ 05 января 2019

Вы можете использовать длинный формат для объявления портов в файле docker-compose.yml, как показано в следующем файле test-compose.yml:

version: "3.6"

services:
  web:
    image: jwilder/whoami:latest   
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - target: 8000
        published: 4000
        protocol: tcp
        mode: ingress
    networks:
      - webnet

networks:
  webnet:
    driver: overlay

В режиме входа вы сможете получить доступ к службе на любом узле кластера Swarm через порт 80.

См. https://docs.docker.com/engine/swarm/ingress/#using-the-routing-mesh для получения дополнительной информации о сетке маршрутизации Swarm и https://docs.docker.com/compose/compose-file/#long-syntax-1 для синтаксиса длинного порта.

Я протестировал это в Windows 10, просто запустил docker stack deploy -c test-compose.yml test и мог видеть I'm <hostname>, отображаемый при посещении localhost:4000

Вы должны быть в состоянии воспроизвести это. Вы уверены, что ваш сервер Python прослушивает порт 80 и не привязан к 127.0.0.1?

...