gpt4 book ai didi

docker - Kafka 与 Docker 动态adverted_host_name

转载 作者:行者123 更新时间:2023-12-01 03:35:18 24 4
gpt4 key购买 nike

我已经在 Dev 和 QA 中使用 wurstmeister/Kafka 几个星期了,但在每种情况下我都需要硬编码 KAFKA_ADVERTISED_HOST_NAME使用 docker-compose 到它所在的盒子的 IP .在测试过程中这不是问题,但现在我正试图将其扩展到生产,它变得有点令人沮丧。

我继续使用docker-compose在某种程度上手动将 Kafka 和 Zookeper 的三个实例部署到三个单独的云主机上。我已经打开了适当的端口,并在我有限的 Docker 知识中尝试了所有方法来动态分配 KAFKA_ADVERTISED_HOST_NAME .令我沮丧的是,它总是会产生某种错误。 docker hub 上的 README 提到通过 VIA 动态分配这个变量HOSTNAME_COMMAND, e.g. HOSTNAME_COMMAND: "route -n | awk '/UG[ \t]/{print $$2}'"
这会导致我的应用程序在尝试连接时获得连接被拒绝的响应。但是,手动将 IP 分配给三台主机可以正常工作。我在这里想念什么?!

最佳答案

撰写可以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将列出默认接口(interface)。
然后 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 机器获取 IP

如果您正在管理远程 docker-machine您可以通过 machine environment 获取 IP .
DOCKER_HOST_IP=$(docker-machine ip ${DOCKER_MACHINE_NAME})

关于docker - Kafka 与 Docker 动态adverted_host_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35418939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com