Docker componer, interpolación del puerto asignado

Dado el siguiente docker-compose.yml. Me gustaría escalar el service kafka, pero no asignar ningún puerto específico. La configuration de variables de entorno debe poder interpolar el puerto asignado contextual por docker-compose. ¿Es eso posible?

  cuidador del zoológico:
   image: wurstmeister / zookeeper
   puertos:
     - "2181: 2181"
 Kafka:
   image: wurstmeister / kafka
   puertos:
     - "9092" # No estoy asignando un puerto remoto aquí, dejando eso para docker-componer
   campo de golf:
     - zookeeper: zk
   ambiente:
     KAFKA_PORT: 9092
     KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT: // localhost: 9092, PLAINTEXT: // localhost: $ {ASSIGNED_PORT}" # Me gustaría que ASSIGNED_PORT sea el puerto asignado de docker-compose
     KAFKA_AUTO_CREATE_TOPICS_ENABLE: "verdadero"
     KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1"
   volúmenes:
     - /var/run/docker.sock:/var/run/docker.sock

Si las variables de entorno se encuentran en el context en el que está ejecutando el docker-compose up , las opciones de configuration pueden contener variables de entorno.

Compose usa los valores variables del entorno de shell en el que se ejecuta docker-compose.
Por ejemplo, suponga que el shell contiene ASSIGNED_PORT=8000 y proporciona esta configuration:

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

Cuando ejecuta Docker-compose con esta configuration, Compose busca la variable de entorno ASSIGNED_PORT en el shell y la sustituye por su valor. En este ejemplo, Compose resuelve la asignación de puertos a "8000:9092" antes de crear el contenedor kafka .

Si no se establece una variable de entorno, Compose sustituye con una cadena vacía. En el ejemplo anterior, si ASSIGNED_PORT no está configurado, el valor para la asignación del puerto es :9092 (que es, por supuesto, una asignación de puerto no válida, y dará como resultado un error al intentar crear el contenedor).

Ambas syntax $VARIABLE y ${VARIABLE} son compatibles. Las funciones extendidas de estilo de shell, como ${VARIABLE-default} y ${VARIABLE/foo/bar} , no son compatibles.

Verifique esto en la página de documentation de Docker

Compose no inyecta ninguna variable de entorno, por lo que actualmente no es posible.

Sin embargo, como ya está exponiendo el conector de la window acoplable al contenedor, podría usar una secuencia de commands de punto de input para consultar el puerto expuesto y establecer la variable de entorno antes de iniciar kafka.