如何让 docker 容器运行一个命令来重新启动另一个容器

如何让 docker 容器运行一个命令来重新启动另一个容器

我制作了一个 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

相关内容