Docker 在部署另一个容器后重新启动容器
我有一个项目使用Dokku在一台服务器上运行多个web应用程序。让我们假设web应用程序/容器是A、B和C,然后我有一个容器D,它不是web应用程序,而是容器A、B和C之间共享代码库的集合(例如DB模型定义、配置等) 一切都很好,但问题是当容器D更新时,我需要重新启动所有其他容器(A、B和C),以便它们可以看到应用的更改。我的第一个想法是在容器D中有一个脚本,该脚本将在Docker 在部署另一个容器后重新启动容器,docker,dokku,Docker,Dokku,我有一个项目使用Dokku在一台服务器上运行多个web应用程序。让我们假设web应用程序/容器是A、B和C,然后我有一个容器D,它不是web应用程序,而是容器A、B和C之间共享代码库的集合(例如DB模型定义、配置等) 一切都很好,但问题是当容器D更新时,我需要重新启动所有其他容器(A、B和C),以便它们可以看到应用的更改。我的第一个想法是在容器D中有一个脚本,该脚本将在post deploy触发器上执行,但由于该脚本将在容器中运行,这意味着它无法访问主机的文件 由于我最近才开始使用Dokku,我
post deploy
触发器上执行,但由于该脚本将在容器中运行,这意味着它无法访问主机的文件
由于我最近才开始使用Dokku,我想知道在成功部署容器D之后,最简单的执行方法是什么:
dokku ps:restart A
dokku ps:restart B
dokku ps:restart C
您可以使用“部署后”脚本选项。您可以将docker套接字安装到D容器上。这样,容器D可以通过以下方式运行并重新启动其他容器:
curl --unix-socket /var/run/docker.sock -X POST http:/v1.24/containers/<container-name>/restart
感谢@yamenk,完整答案是:
apk add--no cache curl
insideDockerfile
确保容器D中安装了curl
dokku存储:mount D/var/run/Docker.sock:/var/run/Docker.sock
post-deploy
script内部运行以下命令:curl--unixsocket/var/run/docker.sock-X post-http:/{docker-api版本}/containers/{container-name}/restart
apk add--no cache docker
insideDockerfile
,确保容器D中安装了docker
dokku存储:mount D/var/run/Docker.sock:/var/run/Docker.sock
感谢您为我指出了正确的方向,但我仍然需要深入了解我还需要在容器D中安装Docker。您不需要在容器中安装Docker。通过安装docker套接字,您应该能够在主机上运行docker命令。我不知道是否应该,但它不起作用。当我试图从容器D中运行
docker
时(没有安装docker),我得到docker:没有这样的文件或目录
。如果我也尝试挂载/usr/bin/docker
,那么我会得到类似的错误:/usr/bin/docker:没有这样的文件或目录
。在容器D中安装Docker是唯一的解决方案。Docker具有客户机-服务器体系结构。Docker命令可以通过curl发出。例如,要重新启动一个容器,只需发出:curl--unixsocket/var/run/docker.sock-xpost-http:/v1.24/containers//restart
。如果装载了docker.sock
,则可以从容器内部发出此命令。不需要在容器内安装docker,而需要一个更大的容器。
docker run -v /var/run/docker.sock:/var/run/docker.sock ...