我有一个非常特殊的场景。包含一些码头集装箱的虚拟机。其中一个容器需要知道主机IP。问题是如果我通过容器构建主机ip或在Docker运行命令上使用-e
,它在容器上保持“静态”(始终是相同的那一刻)。码头工人。将动态主机ip添加到容器上的env var
该vm可以在笔记本电脑上,笔记本电脑正在从不同的网络移动,并且vm主机ip可以不同,每次重新启动。
这个特殊的容器有--restart=always
,并且没有被构建或再次“码头运行”......只有一次。正如我所说,我需要主机的ip在每次重新启动时配置容器内的服务在它的入口点,因为容器有一个绑定DNS服务器,它必须加载一个带有一些必须指向自己的DNS条目的区域(主机的IP )。如果可能的话,环境变量将会很好。这是我的数据:
- “正常”劳克
我Dockerfile的结束:
....
....
ENTRYPOINT ["/etc/bind/entrypoint.sh"]
CMD ["/usr/sbin/named", "-g", "-c", "/etc/bind/named.conf", "-u", "bind"]
入口点文件(正则表达式工作正常,如果该变种可以有正确的价值):
#!/bin/bash
sed -ri "s/IN A.*/IN A $HOSTIP/" /etc/bind/db.my.zone
exec "[email protected]"
泊坞运行CMD:
docker run --name myContainer -d --restart=always -p 53:53 -p 53:53/udp myImage
- 我的尝试:
我猜的入口点是确定的,不应该被修改,如果我可以提供给它用正确的值VAR。
如果我把一个-e
上泊坞窗运行命令,它是相同的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
可能实现这样的事情?谢谢。
我提高了它,因为它给了我想法,映射卷文件。你的方法'/ proc/net/tcp'不适合我,但你的想法很好。我会发布我的解决方案。谢谢。 – OscarAkaElvis