我制作了一个 fastAPI docker 容器,它运行良好,除非有 1 个命令...
我需要它在发生某些事件时重新启动另一个 docker 容器。
我有一个服务器[主机],正在运行docker,docker正在运行containerA(fastAPI)和containerB...
我怎样才能使containerA运行一个命令,使主机执行此命令:
docker重启containerB
注意,主机操作系统是linux。
我尝试使用python的 subprocess.run() ,但是它当然不起作用,containerA没有安装docker,所以它当然没有docker命令。
我读过文章说安装 unix 套接字可以工作,我尝试安装 '/var/run/docker.sock:/var/run/docker.sock' 但它不起作用。
如果您知道如何使其发挥作用,我将不胜感激。
谢谢。
答案1
/var/run/docker.sock
只要您觉得舒服,通常的方法是安装在容器内将主机的 Docker 守护进程暴露给容器。为此,您还需要确保 Docker 客户端二进制文件 ( docker
) 在容器内可用;如果不是,您需要将其添加到图像中。
答案2
这将是一个更好的设计,挂载绑定一个目录,然后在主机和容器之间的挂载上创建一个文件,并从主机查看这个目录的变化,然后重新启动docker容器。
像往常一样从主机绑定挂载:
docker run ... -v /host/path:/container/path:rw
在主机上,检查目录:
while true; do
if test -e "$dir/test"; then
docker restart containerX
rm -f "$dir/test"
fi
sleep 1
done
从容器中:
touch "$dir/test"
即使在技术上可以共享 docker 的套接字以在容器内运行 docker 命令,docker 的专家也建议不要这样做,因为安全原因。
了解 DooD 和 DinDpodman
,如果您坚持使用这种方法,也许对安全性更好。podman
没有像 一样运行的 root 服务docker
。