Определение IP-адреса в контейнере docker



У меня есть файл docker-compose с несколькими определениями контейнеров-служб. Одна из служб взаимодействует с Apache Kafka в рамках одного и того же запуска docker-compose.



Итак, у меня есть такое определение Кафки докера:



  kafka:
image: spotify/kafka
ports:
- "2181:2181"
- "9092:9092"
environment:
ADVERTISED_HOST: 127.0.0.1
ADVERTISED_PORT: 9092


У меня есть определение службы в том же файле docker-compose. В сценарии запуска сервиса я должен каким-то образом вычислить IP-адрес экземпляра Kafka.



Я знаю, я могу использовать что-то вроде docker inspect, чтобы узнать, какой IP-адрес используется контейнер.



Но как я могу сделать это динамически в среде docker-compose?



EDIT



Итак, правильная конфигурация должна быть (Спасибо, @nwinkler):



kafka:
image: spotify/kafka
ports:
- "2181:2181"
- "9092:9092"
environment:
ADVERTISED_HOST: kafka
ADVERTISED_PORT: 9092

myservice:
image: foo
links:
- kafka:kafka


Не забудьте установить ADVERTISED_HOST в kafka (или как вы назвали свой контейнер Кафки в docker-compose).

639   2  

2 ответов:

Вы можете использовать Докер сочинять ссылкам функция для этого. Если вы предоставите ссылку на контейнер kafka из другого контейнера, Docker Compose гарантирует, что ваш другой контейнер сможет получить доступ к контейнеру Kafka через его имя хоста - вам не нужно будет знать его IP-адрес.

Пример:

kafka:
    image: spotify/kafka
    ports:
      - "2181:2181"
      - "9092:9092"
    environment:
      ADVERTISED_HOST: 127.0.0.1
      ADVERTISED_PORT: 9092

myservice:
    image: foo
    links:
      - kafka:kafka
Это позволит вашему контейнеру myservice получить доступ к контейнеру Kafka через имя хоста kafka. Таким образом, из вашего контейнера myservice Вы можете сделать что-то вроде curl http://kafka:9092 для доступа служба на контейнере Кафки.

Docker-Compose делает это через DNS, он создает сопоставление имени хоста / IP в вашем контейнере, позволяя вам получить доступ к контейнеру, не зная его IP-адрес.

Ip вашего контейнера будет тем ip, который вы ищете.

Добавьте номер порта (9092 в вашем случае) к ip-адресу контейнера, чтобы получить то, что обслуживает Кафка.

Comments

    Ничего не найдено.