给出以下docker-compose.yml。我想扩展服务kafka,但不分配任何特定的端口。环境变量配置应该能够通过docker-compose插入上下文分配的端口。这可能吗?
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
答案 0 :(得分:2)
如果环境变量位于运行docker-compose up
的上下文中,则配置选项可以包含环境变量。
Compose使用运行docker-compose的shell环境中的变量值
例如,假设shell包含ASSIGNED_PORT=8000
并且您提供此配置:
kafka:
image: wurstmeister/kafka
ports:
- "${ASSIGNED_PORT}:9092"
使用此配置运行docker-compose时,Compose会在shell中查找ASSIGNED_PORT
环境变量并替换其值。在此示例中,Compose将端口映射解析为"8000:9092"
之前创建kafka
容器。
如果未设置环境变量,请使用空字符串Compose替换。在上面的示例中,如果未设置ASSIGNED_PORT
,则端口映射的值为:9092
(这当然是无效的端口映射,并且在尝试创建容器时将导致错误)
支持$VARIABLE
和${VARIABLE}
语法。 1}}和${VARIABLE-default}
等扩展的shell样式功能不受支持。
答案 1 :(得分:1)
Compose不会注入任何环境变量,因此目前无法实现。
但是,由于您已经将docker socket暴露给容器,因此您可以使用入口点脚本来查询公开的端口并在启动kafka之前设置环境变量。