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。