2016-11-07 5 views
2

여러 서비스 컨테이너 정의가있는 docker-compose 파일이 있습니다. 하나의 서비스는 동일한 도커 작성 실행 내에서 Apache Kafka와 통신합니다.도커 컨테이너 내의 IP 주소를 찾아냅니다.

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

내가 같은 고정 표시기-작성 파일 내 서비스 정의가 :

그래서 나는이 같은 카프카 고정 표시기 정의를 가지고있다. 서비스 시작 스크립트에서 Kafka 인스턴스의 IP 주소를 어떻게 든 알아 내야합니다.

나는 컨테이너에서 사용하는 IP 주소를 확인하기 위해 docker inspect과 같은 것을 사용할 수 있습니다.

그러나 어떻게 도커 작성 환경에서 동적으로 수행 할 수 있습니까?

편집

그래서 오른쪽 구성해야한다 (@nwinkler 감사) :

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

myservice: 
image: foo 
links: 
    - kafka:kafka 

가 (또는 당신이 당신의 카프카라는 이름의 방법 ADVERTISED_HOSTkafka에 설정하는 것을 잊지 마세요 용기 내에서 docker-compose).

+1

'kafka'를 호스트 이름으로 사용하여'kafka' 컨테이너에 연결할 수 있어야합니다. – tkausl

답변

4

이 경우 Docker Compose Links 기능을 사용할 수 있습니다. 다른 컨테이너에서 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 호스트 이름을 통해 카프카의 컨테이너에 액세스 할 수 있습니다. 따라서 myservice 컨테이너에서 curl http://kafka:9092과 같은 작업을 수행하면 Kafka 컨테이너의 서비스에 액세스 할 수 있습니다.

Docker-Compose는 DNS를 통해이를 수행하며 컨테이너에 호스트 이름/IP 매핑을 만들어 IP 주소를 모른 채 컨테이너에 액세스 할 수있게합니다.

+0

그것은 작동합니다. 굉장해! 고맙습니다. – leshkin

+0

안녕하세요. 지금은 효과가 있음을 알려드립니다. – nwinkler

1

컨테이너의 IP는 찾고있는 IP입니다.

컨테이너의 IP에 포트 번호 (귀하의 경우 9092)를 추가하면 카프카가 제공하는 모든 것을 얻을 수 있습니다.

관련 문제