privileged
概述
默认情况下,Docker 容器是 "unprivileged "的,例如,无法在 Docker 容器内运行 Docker 守护进程。这是因为默认情况下,容器不允许访问任何设备,但 "特权 "容器可以访问所有设备。link
起因
在部署 openwrt 的时候遇到了这一个参数, 因为要使用 混杂模式(Promiscuous Mode)。
# 开启混杂模式
ip link set ovs_eth0 promisc on
# 创建一个子网为192.168.10.1/24的虚拟网络,网关是192.168.10.1,名为ovs_lan
docker network create -d macvlan --subnet=192.168.10.1/24 --gateway=192.168.10.1 -o parent=ovs_eth0 ovs_lan
然后在 docker 容器部署的时候,让容器直接使用网卡。 从而能将容器独立出一个 ip 作为局域网网关使用。
在某一次远程连接出问题之后,我开始使用外接屏幕键盘的方式操作物理机。
但是操作的过程中 shell 的交互时常被另一个 BusyBox 的 shell 抢夺。
一开始以为是上次的入侵经历导致的这一问题,但是后续又成功用远程访问了,便开始排查这一问题。
最终在一个 openwrt 的容器中找到了 BusyBox 的 shell,其他信息也都对的上。
在询问了chatgpt之后给出了几种可能
键盘事件捕获: 可能有某个程序或脚本在运行,它把键盘事件同时发送给了本地 shell 和 Docker 容器的 shell。
终端多路复用: 如果您使用了像 tmux 或 screen 这样的终端多路复用工具,并且不知怎地配置得不当,可能会出现这样的问题。
Docker 容器配置: 如果 Docker 容器以某种特殊的方式配置(例如,使用 --privileged 标志),并且以某种方式能够接收到主机上的键盘输入,这也可能导致该问题。
系统错误或 Bug: 最后的可能性是操作系统或 Docker 自身存在 bug,但这种可能性相对较小。
由此得知了 privileged 这个参数。
找到的参考资料
因为是比较少见的问题,相应的资料也不太多,只在GitHub上找到了几个issue
目前的解决方案
因为对docker的了解有限,准备过段时间尝试变更权限方式,看看可不可行。
在网上还没有找到太好的办法,只能 --restart=no 让容器在物理机重启后不再启动。
如果有找到好的办法,麻烦告诉我一下。