2016-07-27 7 views
1

Gegeben die folgenden docker-compose.yml. Ich möchte den Service kafka skalieren, aber keine bestimmten Ports zuweisen. Die Konfiguration der Umgebungsvariablen sollte in der Lage sein, den kontextuell zugewiesenen Port mit docker-compose zu interpolieren. Ist das möglich?Docker komponieren, Interpolation des zugewiesenen Ports

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 

Antwort

1

Compose injizieren keine Umgebungsvariablen, so dass derzeit nicht möglich ist.

Da Sie jedoch den Docker-Socket bereits dem Container aussetzen, können Sie ein Einstiegspunktskript verwenden, um den exponierten Port abzufragen und die Umgebungsvariable festzulegen, bevor Sie kafka starten.

2

Wenn sich Ihre Umgebungsvariablen in dem Kontext befinden, in dem Sie die docker-compose up ausführen, können Ihre Konfigurationsoptionen Umgebungsvariablen enthalten.

Compose verwendet die Variablenwerte aus der Shellumgebung, in der docker-compose ausgeführt wird.
Beispiel: Angenommen, die Schale enthält ASSIGNED_PORT=8000 und Sie liefern diese Konfiguration:

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

Wenn Sie Docker-komponieren sich mit dieser Konfiguration laufen, Compose für die ASSIGNED_PORT Umgebungsvariable in der Shell sucht und ersetzt in seinem Wert. In diesem Beispiel löst Compose das Port-Mapping vor dem Erstellen des kafka-Containers auf "8000:9092" auf.

Wenn eine Umgebungsvariable nicht festgelegt ist, erstellen Sie Ersatz durch eine leere Zeichenfolge. Wenn im obigen Beispiel ASSIGNED_PORT nicht festgelegt ist, lautet der Wert für die Portzuordnung :9092 (was natürlich eine ungültige Portzuordnung ist und beim Erstellen des Containers zu einem Fehler führen wird).

Sowohl $VARIABLE als auch ${VARIABLE} Syntax werden unterstützt. Erweiterte Shell-Funktionen wie ${VARIABLE-default} und ${VARIABLE/foo/bar} werden nicht unterstützt.

prüfen diese auf Docker documentation page