Kafka与Docker动态advertised_host_name

时间:2016-02-15 20:57:58

标签: docker apache-kafka

我已经在Dev和QA中使用了wurstmeister / Kafka几周,但是在每种情况下我都需要使用{{1将KAFKA_ADVERTISED_HOST_NAME硬编码到它所使用的盒子的IP上。 }}。这在测试过程中并不是一个问题,但现在我正在尝试将其扩展到生产阶段,它变得更加令人沮丧。

我将继续使用docker-compose将三个Kafka和Zookeper实例手动部署到三个独立的云主机上。我已经打开了相应的端口,并尝试使用我有限的Docker知识中的所有内容来动态分配docker-compose。令我沮丧的是,它总会产生某种错误。 docker hub上的README提到动态分配此变量VIA
KAFKA_ADVERTISED_HOST_NAME

这会导致我的应用程序在尝试连接时获得连接被拒绝的响应。但是,手动将IP分配给三台主机完全正常。我在这里想念的是什么?!

1 个答案:

答案 0 :(得分:2)

在运行时撰写可以substitute variables into configuration options

撰写环境变量

KAFKA_ADVERTISED_HOST_NAME容器环境变量设置为名为DOCKER_HOST_IP的局部变量。

whatever:
  environment:
    KAFKA_ADVERTISED_HOST_NAME: ${DOCKER_HOST_IP}

每当您运行DOCKER_HOST_IP时,都需要设置docker-compose。当docker-compose未设置时,您会收到警告。

Docker主机上的IP

正在运行ip route show将列出默认界面 然后ip address show将为您提供IP地址。

将这些变为变量

default_interface=$(ip ro sh | awk '/^default/{ print $5; exit }')
export DOCKER_HOST_IP=$(ip ad sh $default_interface | awk '/inet /{print $2}' | cut -d/ -f1)
[ -z "$DOCKER_HOST_IP" ] && (echo "No docker host ip address">&2; exit 1 )
echo "$DOCKER_HOST_IP"

您可以将这些命令添加到启动脚本的任何位置,或者从它们创建独立脚本以在需要时调用。

通过Docker Machine的IP

如果您正在管理远程docker-machine,则可以通过machine environment获取IP。

DOCKER_HOST_IP=$(docker-machine ip ${DOCKER_MACHINE_NAME})