2016-07-27 4 views
1

다음과 같은 docker-compose.yml이 주어졌습니다. 서비스 kafka를 확장하고 싶지만 특정 포트를 지정하지는 않습니다. 환경 변수 설정은 docker-compose에 의해 contextual assigned port를 보간 할 수 있어야한다. 그게 가능하니? 즉 현재 불가능하므로할당 된 포트의 Docker 작성, 보간

zookeeper: 
    image: wurstmeister/zookeeper 
    ports: 
    - "2181:2181" 
kafka: 
    image: wurstmeister/kafka 
    ports: 
    - "9092" #I am not assigning a remote port here, leaving that to docker-compose 
    links: 
    - zookeeper:zk 
    environment: 
    KAFKA_PORT: 9092 
    KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://localhost:9092, PLAINTEXT://localhost:${ASSIGNED_PORT}" # I would like ASSIGNED_PORT here to be the assigned port of docker-compose 
    KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" 
    KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1" 
    volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 

답변

1

작성은 환경 변수를 주입하지 않는다.

그러나 이미 컨테이너에 도커 소켓을 노출하고 있으므로 엔트리 포인트 스크립트를 사용하여 노출 된 포트를 쿼리하고 kafka를 시작하기 전에 환경 변수를 설정할 수 있습니다.

2

환경 변수가 docker-compose up을 실행하는 컨텍스트에있는 경우 구성 옵션에 환경 변수가 포함될 수 있습니다.

Compose는 docker-compose가 실행되는 셸 환경의 변수 값을 사용합니다. 예를 들어
은 쉘이 ASSIGNED_PORT=8000이 포함되어 있다고 가정하고이 구성 공급 :이 구성과 함께 고정 표시기가-구성 실행하면 작성은 쉘에서 ASSIGNED_PORT 환경 변수에 대한보고에서 그 값을 대체

kafka: 
    image: wurstmeister/kafka 
    ports: 
    - "${ASSIGNED_PORT}:9092" 

합니다. 이 예에서 Compose는 kafka 컨테이너를 만들기 전에 포트 매핑을 "8000:9092"으로 해결합니다.

환경 변수가 설정되지 않은 경우 Compose는 빈 문자열로 대체합니다. 위의 예에서 ASSIGNED_PORT이 설정되지 않은 경우 포트 매핑 값은 :9092입니다 (물론 잘못된 포트 매핑이므로 컨테이너를 만들 때 오류가 발생합니다).

$VARIABLE${VARIABLE} 구문이 모두 지원됩니다. ${VARIABLE-default}${VARIABLE/foo/bar}과 같은 확장 된 셸 스타일 기능은 지원되지 않습니다.

확인해보십시오. Docker documentation page