【问题标题】:Docker. Add dynamic host ip to env var on container码头工人。将动态主机 ip 添加到容器上的 env var
【发布时间】:2017-08-26 00:03:26
【问题描述】:

我有一个非常特殊的场景。包含一些 docker 容器的虚拟机。其中一个容器需要知道主机 ip。问题是,如果我在容器构建上传递主机 ip 或在 docker run 命令上使用-e,它在容器上仍然是“静态的”(总是相同的,那一刻)。

该 vm 可以在笔记本电脑上,并且笔记本电脑正在从不同的网络移动,并且每次重新启动时 vm 主机 ip 都可能不同。

这个特殊的容器有--restart=always 并且不会再次构建或“docker run”......只有一次。正如我所说,每次重新启动时我都需要主机的 ip 来在其入口点配置容器内的服务,因为容器有一个绑定 dns 服务器,它必须加载一个带有一些必须指向自身的 dns 条目的区域(主机的 ip )。如果可能的话,环境变量会很棒。这些是我的数据:

  • “正常”的劳克

我的 Dockerfile 结束:

....
....
ENTRYPOINT ["/etc/bind/entrypoint.sh"]
CMD ["/usr/sbin/named", "-g", "-c", "/etc/bind/named.conf", "-u", "bind"]

入口点文件(如果 var 可以具有正确的值,则正则表达式可以正常工作):

#!/bin/bash
sed -ri "s/IN A.*/IN A $HOSTIP/" /etc/bind/db.my.zone
exec "$@"

Docker 运行命令:

docker run --name myContainer -d --restart=always -p 53:53 -p 53:53/udp myImage
  • 我尝试了什么:

我猜入口点没问题,如果我可以向它提供具有正确值的 var,则不应对其进行修改。

如果我将-e 放在 docker run 命令上,即使主机位于不同的网络上,它也会永远使用相同的 ip “硬编码”:

docker run -e HOSTIP=$(ifconfig eth0 | grep netmask | awk '{print $2}') --name myContainer \
-d --restart=always -p 53:53 -p 53:53/udp myImage

我也尝试修改 Dockerfile 上的 CMD,但未成功:

CMD (export HOSTIP=$(ifconfig eth0 | grep netmask | awk '{print $2}'));/usr/sbin/named -g -c /etc/bind/named.conf -u bind

有可能实现这样的目标吗?谢谢。

【问题讨论】:

    标签: docker dns environment-variables containers host


    【解决方案1】:

    主机上的文件/proc/net/tcp 显示所有打开的套接字。特别是,第二列是主机接口的local_address。

    此列中的值存储为 little-endian 四字节十六进制数字。要将这些转换为 IP 地址,请查看 here

    因此,在启动容器时,您可以将主机上的这个文件挂载到容器-v /proc/net/tcp:/host-tcp 上,并读取主机的 IP 地址,这将不断反映在这个文件中。

    【讨论】:

    • 我赞成它,因为它给了我想法,映射一个卷文件。您的方法/proc/net/tcp 对我不起作用,但您的想法很好。我会发布我的解决方案。谢谢。
    【解决方案2】:

    我终于解决了。谢谢@yamenk 的回答,它给了我这个想法,点赞。

    最后我做了什么:

    • 我在主机上创建了一个简单的脚本,它获取主机 ip 并将其写入另一个文件。
    • 我将该脚本设置为在每次主机启动时在 docker start 之前启动。
    • 我在 docker run 命令上使用-v 将带有 ip 的文件映射到容器中。
    • 我将入口点设置为从包含该 ip 的文件中获取 ip 并使用 sed 修改所需的容器配置文件

    一切正常!如果我在另一个不同的网络上启动 vm(主机),它会获取 ip,并且容器能够在使用新 ip 开始之前重新配置自己。

    【讨论】:

    • 你能分享你启动的脚本吗?
    • 我使用 docker compose 知道如何实现相同的效果吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2021-04-12
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多