给定以下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/

10-12 04:59