позвольте docker получить доступ к консулу в docker написать - PullRequest
0 голосов
/ 31 марта 2020

Файл docker составления:

version: '3'

services:
  rs:
    build: .
    ports:
      - "9090:9090"
  consul:
    image: "consul"
    ports:
      - "8500:8500"
    hostname: "abc"

rs - это приложение go для микросерверов, которое будет обращаться к консулу и адресу консула, настроенному в файле, например:

"microservice": {
        "serviceName": "hello",
        "registry": "consul=abc:8500",

Однако это не работает, журнал ошибок отчета rs:

register error: Put http://abc:8500/v1/agent/service/register: dial tcp: lookup abc on 127.0.0.11:53: no such host

Я могу получить доступ к консольному интерфейсу на хост-машине по http://127.0.0.1: 8500 , это работает

Как настроить сеть, чтобы сотрудники могли получать доступ к консулу?

1 Ответ

1 голос
/ 31 марта 2020

Вы изменили имя хоста контейнера консула, однако служба rs не знает об этом и пытается разрешить abc, запрашивая DNS-сервер по умолчанию, 127.0.0.11 порт 53. Вы можете увидеть это в сообщении об ошибке, так как этот DNS-сервер не может разрешить abc, поскольку у него нет информации об этом.

Самый простой способ решить эту проблему и заставить его работать в docker -compose в сети, созданной между службами в docker -compose, следующее:

version: '3'

services:
  rs:
    build: .
    # image: aline:3.7
    ports:
      - "9090:9090"
    # command: sleep 600
    networks:
      rs-consul:
  consul:
    image: "consul"
    ports:
      - "8500:8500"
    hostname: "abc"
    networks:
      rs-consul:
        aliases:
          - abc

networks:
  rs-consul:

Это создаст новую сеть rs-consul (проверьте с помощью docker network ls, у нее будет некоторый префикс, у моего был working_directory_name_ в качестве префикса). И в этой сети машина Consul имеет псевдоним abc. Теперь ваша служба rs должна иметь возможность обращаться к службе Consul через http://abc:8500/

. Я использовал закомментированные строки (image:alpine:3.7 и command: sleep 600) вместо build: ., чтобы проверить соединение, так как я У вас нет rs сервисного кода для использования в build:. После запуска контейнеров я использовал docker exec -it <conatiner-id> sh для запуска оболочки на rs контейнере, затем установил curl и смог получить страницу пользовательского интерфейса Консула с помощью следующей команды:

curl http://abc:8500/ui/

Надеюсь, это поможет.

...