在 `lxc start` 之后检索容器 IP 地址
Retrieving Container IP address after `lxc start`
我在云提供商的 cloud-init 中有以下脚本 运行。它从我网络上的另一台主机抓取一个容器,启动它,然后尝试将主机上的端口转发到容器:
lxc init ...
lxc remote add gateway 10.132.98.1:8099 --accept-certificate --password securpwd
lxc copy gateway:build-slave build-slave
lxc start build-slave
CONTAINER_IP=$(lxc list "build-slave" -c 4 | awk '!/IPV4/{ if ( != "" ) print }')
iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 2200 -j DNAT --to ${CONTAINER_IP}
唯一的问题是 lxc start
returns 和 IPV4
信息可用之间存在任意延迟。我目前的解决方案是在 lxc start
命令后添加 sleep 5s
,但我担心如果我的服务器负载不足,它实际上可能会在容器初始化之前超过 5 秒。
有没有不依赖任意等待期的更好的解决方案?
正如 Lawrence 在评论中指出的那样,LXD 提供了一个可以在容器上设置的 "proxy" device
。这样,我不必知道容器的 IP 地址即可设置正确的 IPTABLES 条目。当我指定的容器启动时,LXD 会为我设置代理规则。
我是这样配置的:
DROPLET_PUB_IP=$(ip -f inet addr show ens3 | sed -En -e 's/.*inet ([0-9.]+).*//p')
lxc config device add build-slave ssh-slave proxy listen=tcp:${DROPLET_PUB_IP}:2200 connect=tcp:localhost:22
我在云提供商的 cloud-init 中有以下脚本 运行。它从我网络上的另一台主机抓取一个容器,启动它,然后尝试将主机上的端口转发到容器:
lxc init ...
lxc remote add gateway 10.132.98.1:8099 --accept-certificate --password securpwd
lxc copy gateway:build-slave build-slave
lxc start build-slave
CONTAINER_IP=$(lxc list "build-slave" -c 4 | awk '!/IPV4/{ if ( != "" ) print }')
iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 2200 -j DNAT --to ${CONTAINER_IP}
唯一的问题是 lxc start
returns 和 IPV4
信息可用之间存在任意延迟。我目前的解决方案是在 lxc start
命令后添加 sleep 5s
,但我担心如果我的服务器负载不足,它实际上可能会在容器初始化之前超过 5 秒。
有没有不依赖任意等待期的更好的解决方案?
正如 Lawrence 在评论中指出的那样,LXD 提供了一个可以在容器上设置的 "proxy" device
。这样,我不必知道容器的 IP 地址即可设置正确的 IPTABLES 条目。当我指定的容器启动时,LXD 会为我设置代理规则。
我是这样配置的:
DROPLET_PUB_IP=$(ip -f inet addr show ens3 | sed -En -e 's/.*inet ([0-9.]+).*//p')
lxc config device add build-slave ssh-slave proxy listen=tcp:${DROPLET_PUB_IP}:2200 connect=tcp:localhost:22