Docker组合,分配端口的插值

鉴于以下docker-compose.yml。 我想扩展服务kafka,但不分配任何特定的端口。 环境variablesconfiguration应该能够通过docker-compose插入上下文分配的端口。 那可能吗?

 饲养员:
  图片:wurstmeister / zookeeper
  端口:
     - “2181:2181”
卡夫卡:
   image:wurstmeister / kafka
  端口:
     - “9092”#我没有在这里分配一个远程端口,把它留给docker-compose
  链接:
     -  zookeeper:zk
  环境:
     KAFKA_PORT:9092
     KAFKA_ADVERTISED_LISTENERS:“PLAINTEXT:// localhost:9092,PLAINTEXT:// localhost:$ {ASSIGNED_PORT}”#我想这里的ASSIGNED_PORT是docker-compose分配的端口
     KAFKA_AUTO_CREATE_TOPICS_ENABLE:“true”
     KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:“1”
  卷:
     -  /var/run/docker.sock:/var/run/docker.sock

如果您的环境variables位于运行docker-compose up的环境中,那么您的configuration选项可以包含环境variables。

Compose使用运行docker-compose的shell环境中的variables值。
例如,假设shell包含ASSIGNED_PORT=8000并提供此configuration:

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

当你用这个configuration运行docker-compose时,Compose将在shell中查找ASSIGNED_PORT环境variables并replace其值。在本例中,Compose在创buildkafka容器之前将端口映射parsing为"8000:9092"

如果未设置环境variables,则Compose将replace为空string。 在上面的例子中,如果没有设置ASSIGNED_PORT ,那么端口映射的值是:9092 (这当然是一个无效的端口映射,并且在尝试创build容器时会导致错误)。

支持$VARIABLE${VARIABLE}语法。 不支持扩展的shell风格的function,如${VARIABLE-default}${VARIABLE/foo/bar}

在Docker文档页面检查这个

撰写不注入任何环境variables,所以目前不可能。

但是,由于您已经将docker套接字展示给容器,因此可以使用入口脚本查询公开的端口并在启动kafka之前设置环境variables。