Как получить доступ к Docker-контейнеру по адресу localhost - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь получить доступ к Docker-контейнеру из другого контейнера, используя адрес localhost.

Создать файл довольно просто.Оба контейнера порты выставлены.Нет проблем при сборке.

На моем хост-компьютере я могу успешно выполнить curl http://localhost:8124/ и получить ответ.

Но внутри django_container при попытке выполнить ту же команду я получаю Connection refused ошибка.

Я пытался добавить их в той же сети, но результат не изменился.

Что ж, если я попытаюсь выполнить с внутренним ip этого контейнера, например curl 'http://172.27.0.2:8123/', я получуответ.

Это поведение по умолчанию?Как я могу достичь clickhouse_container, используя localhost?

version: '3'

services:
  django:
    container_name: django_container
    build: ./django
    ports:
      - "8007:8000"
    links:
      - clickhouse:clickhouse
    volumes:
      - ./django:/usr/src/run
    command: bash /usr/src/run/run.sh

  clickhouse:
    container_name: clickhouse_container
    build: ./clickhouse
    ports:
      - "9001:9000"
      - "8124:8123"
      - "9010:9009"

Ответы [ 3 ]

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

Как и в ответе @Billy Ferguson, вы можете перейти с помощью localhost на хост-машине только потому, что: вы определяете отображение порта для маршрута localhost:8124 на clickhouse:8123.

Но когда из другого контейнера (Джанго), вы не можете.Но если вы настаиваете, то есть уродливый обходной путь: поделитесь сетевым пространством имен хоста с network_mode, но с этим контейнер django просто разделит всю сеть хоста.

services:
  django:
    hostname: djano
    container_name: django
    build: ./django
    ports:
       - "8007:8000"
    links:
       - clickhouse:clickhouse
    volumes:
      - ./django:/usr/src/run
    command: bash /usr/src/run/run.sh
    network_mode: "host"
0 голосов
/ 23 мая 2019

Это зависит от настроек config.xml. Если в config.xml 0.0.0.0 </ listen_host> вы можете использовать clickhouse-client -h your_ip --port 9001

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

Таким образом, с помощью этой строки здесь - "8124:8123" вы сопоставляете порт контейнера clickhouse с localhost 8124. Что позволяет получить доступ к clickhouse с localhost через порт 8124.

Если вы хотите поразить контейнер clickhouse изнутри сети Dockerhost, вы должны использовать имя хоста для контейнера. Вот что я люблю делать:

version: '3'

services:
  django:
    hostname: djano
    container_name: django
    build: ./django
    ports:
      - "8007:8000"
    links:
      - clickhouse:clickhouse
    volumes:
      - ./django:/usr/src/run
    command: bash /usr/src/run/run.sh

  clickhouse:
    hostname: clickhouse
    container_name: clickhouse
    build: ./clickhouse
    ports:
      - "9001:9000"
      - "8124:8123"
      - "9010:9009"

Если вы сделаете изменения, как я сделал выше, вы сможете получить доступ к clickhouse из контейнера django, как это curl http://clickhouse:8123.

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