我有几个 docker 容器,它们应该访问 Gentoo 主机上运行的共享 PostgreSQL。如果 dockerized 应用程序使用主机的公共 IP 连接到数据库,则此方法有效。
不过,我想稍微解耦一下通过在环回上使用额外的私有 IP不要使用公共 IP,例如 10.172.17.1。
我不确定要向 /etc/conf.d/net 添加什么,而且由于这是一个我无法物理访问的远程框,所以我有点犹豫,只是随便玩玩。也许有人能给我一些提示?
多谢!
答案1
我自己想出了这个办法:
可以添加config_lo 10.172.17.1/32
到 /etc/conf.d/net,然后通过重新启动 net.lo 服务来分配这个额外的 IP rc-service net.lo restart
。但是...这将在下次重启后消失。
截至目前,Gentoo 不会启动 net.lo 服务来启动环回,而是使用单独的脚本 /etc/init.d/loopback。该脚本用于ifconfig
完成其工作,IP 是硬编码的。修补脚本本身肯定是一个坏主意。
但由于仅在 Docker 容器启动后才需要额外的 IP,因此可以通过本地服务添加:
cat "ip addr add 10.172.17.1/32 dev lo scope host" >/etc/local.d/docker_loopback.start
cat "ip addr del 10.172.17.1/32 dev lo scope host" >/etc/local.d/docker_loopback.stop
chmod a+x /etc/local.d/docker_loopback.*
现在重新启动或者只运行启动脚本然后检查结果:
/etc/local.d/docker_loopback.start
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
valid_lft forever preferred_lft forever
inet 10.172.17.1/32 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever