2016-07-27 63 views
1

给定以下docker-compose.yml。我想扩展服务kafka,但不分配任何特定的端口。环境变量配置应该能够通过docker-compose插入上下文分配的端口。那可能吗?Docker组合,指定端口的插值

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 

回答

1

撰写不注入任何环境变量,使目前不可能。

但是,因为你已经暴露泊坞窗插座的容器,你可以使用一个入口点脚本来查询暴露的端口和卡夫卡开始之前设置环境变量。

2

如果你的环境变量的背景下,你运行docker-compose up,配置选项可以包含环境变量。

撰写从其中搬运工-撰写运行壳环境使用的变量的值。
例如,假设壳含有ASSIGNED_PORT=8000和您提供此配置:

kafka: 
    image: wurstmeister/kafka 
    ports: 
    - "${ASSIGNED_PORT}:9092" 

当您运行此配置泊坞窗,构成了起来,撰写看上去为ASSIGNED_PORT环境变量在外壳和替换它的价值。在此示例中,在创建kafka容器之前,Compose将端口映射解析为"8000:9092"

如果没有设置环境变量,撰写其替换为空字符串。在上面的示例中,如果未设置ASSIGNED_PORT,则端口映射的值为:9092(这当然是无效端口映射,尝试创建容器时会导致错误)。

两个$VARIABLE${VARIABLE}语法的支持。不支持扩展的shell样式功能,如${VARIABLE-default}${VARIABLE/foo/bar}

请在Docker documentation page上检查此项