Определение 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).
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:kafkamyserviceполучить доступ к контейнеру Kafka через имя хостаkafka. Таким образом, из вашего контейнераmyserviceВы можете сделать что-то вродеcurl http://kafka:9092для доступа служба на контейнере Кафки.Docker-Compose делает это через DNS, он создает сопоставление имени хоста / IP в вашем контейнере, позволяя вам получить доступ к контейнеру, не зная его IP-адрес.
Ip вашего контейнера будет тем ip, который вы ищете.
Добавьте номер порта (9092 в вашем случае) к ip-адресу контейнера, чтобы получить то, что обслуживает Кафка.
Comments