给定以下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
最佳答案
如果环境变量在运行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}
语法均受支持。不支持扩展的 shell 样式功能,例如${VARIABLE-default}
和${VARIABLE/foo/bar}
。在Docker documentation page上检查
关于docker - Docker撰写,内插分配的端口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38609344/