Доступ к Docker контейнеру извне / браузер - PullRequest
0 голосов
/ 15 февраля 2020

My Docker Compose config:


version: "3"
services:
  django1:
    build: .
    command: "python ./test1/manage.py runserver"
    ports:
      - "8006:8000"
    expose:
      - "8006"
    networks:
      main_network:
        ipv4_address: 20.20.0.3
  django2:
    build: .
    command: "python ./test2/manage.py runserver"
    ports:
      - "8007:8000"
    expose:
      - "8007"
    networks:
      main_network:
        ipv4_address: 20.20.0.2

networks:
  main_network:
    driver: bridge
    ipam:
      config:
        - subnet: 20.20.0.0/24

, и это моя команда для доступа к Docker извне

docker run --name testname -p 8077:8007 my_image_name

Но все же, когда я захожу из браузера 20.20.0.2:8077 но это не работает

Что я делаю не так?

1 Ответ

0 голосов
/ 15 февраля 2020

Внутренние IP-адреса Docker работают только на одной очень конкретной конфигурации c хост / ОС; Вы не должны пытаться получить к ним прямой доступ, и почти никогда не требуется указывать их в конфигурации. (Фактически вы можете удалить все блоки networks:, Compose предоставляет разумные значения по умолчанию для вас .)

Поскольку вы опубликовали sh ports:, вы можете использовать IP-адрес хоста и опубликованный (первый) номер порта. Если ваш браузер и Docker находятся на одном хосте, то localhost будет работать и здесь (http://localhost:8077), если только вы не используете Docker Toolbox, в этом случае вам нужен адрес docker-machine ip (часто 192.168). 99.100).

Если вы вообще можете получить доступ к частным IP-адресам контейнера (ваш браузер и Docker находятся на одном и том же хосте - 1024 *, и вы не используете более сложный Docker -in- Docker или установка на основе виртуальной машины), тогда вам нужен номер порта внутри контейнера, второй номер в ports:. Это также относится к связи между контейнерами, где имена сервисов Compose должны использоваться как имена хостов (django1 может вызывать http://django2:8000).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...