从特权 Docker 容器访问主机 iptables 和 ufw
Access host iptables and ufw from privileged Docker container
我想在 host OS 上访问 iptables
、ufw
和 reboot
运行ning (Snappy Ubuntu Core 18.04)来自 Docker 容器(运行在同一主机上)。
需要什么卷或 Docker 容器参数才能实现?容器可以 运行 具有 root 用户和特权访问权限。
我完全了解这里的安全隐患,但在这种情况下安全性不是问题。
使用 SSH
您可以 运行 带有 --net=host
选项的容器,然后可以使用 ssh 从容器连接到主机。
在主机模式下,可以从容器连接到主机上的端口22。
没有 SSH
如果您不想使用 ssh,this post 中介绍了一种方法。您需要使用 --privileged
和 --pid=host
运行 容器,然后使用 nsenter
命令。使用此命令,您可以从主机获得交互式 shell。您也可以只 运行 想要的命令。
$ sudo docker run --privileged --pid=host -it alpine:3.8 \
nsenter -t 1 -m -u -n -i sh
$ sudo docker run --privileged --pid=host -it alpine:3.8 \
nsenter -t 1 -m -u -n | sudo iptables -S
请注意,如果您使用的是 MacOS 或 Windows,docker 在管理程序中 运行ning,因此使用它,您将处于 shell管理程序。
我想在 host OS 上访问 iptables
、ufw
和 reboot
运行ning (Snappy Ubuntu Core 18.04)来自 Docker 容器(运行在同一主机上)。
需要什么卷或 Docker 容器参数才能实现?容器可以 运行 具有 root 用户和特权访问权限。
我完全了解这里的安全隐患,但在这种情况下安全性不是问题。
使用 SSH
您可以 运行 带有 --net=host
选项的容器,然后可以使用 ssh 从容器连接到主机。
在主机模式下,可以从容器连接到主机上的端口22。
没有 SSH
如果您不想使用 ssh,this post 中介绍了一种方法。您需要使用 --privileged
和 --pid=host
运行 容器,然后使用 nsenter
命令。使用此命令,您可以从主机获得交互式 shell。您也可以只 运行 想要的命令。
$ sudo docker run --privileged --pid=host -it alpine:3.8 \
nsenter -t 1 -m -u -n -i sh
$ sudo docker run --privileged --pid=host -it alpine:3.8 \
nsenter -t 1 -m -u -n | sudo iptables -S
请注意,如果您使用的是 MacOS 或 Windows,docker 在管理程序中 运行ning,因此使用它,您将处于 shell管理程序。