Docker撰写,指定端口的插值

时间:2016-07-27 09:43:56

标签: docker docker-compose

给出以下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

2 个答案:

答案 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}语法。 ${VARIABLE-default}等扩展的shell样式功能不受支持。

Docker documentation page

上查看此内容

答案 1 :(得分:1)

Compose不会注入任何环境变量,因此目前无法实现。

但是,由于您已经将docker socket暴露给容器,因此您可以使用入口点脚本来查询公开的端口并在启动kafka之前设置环境变量。