部署另一个容器后重新启动容器

我有一个使用Dokku在单个服务器上运行多个Web应用程序的项目。 假设Web应用程序/容器是A,B和C,然后我有一个容器D,它不是Web应用程序,但它是容器A,B和C之间共享代码库的集合(例如数据库模型定义,configuration等) 。

一切都很好,但问题是容器D更新时,我需要重新启动所有其他容器(A,B和C),以便他们可以看到所应用的更改。 我的第一个想法是在容器D中有一个脚本,它将在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 

 docker run -v /var/run/docker.sock:/var/run/docker.sock ... 

感谢@yamenk完整的答案是:

  1. 通过在容器D的Dockerfile添加apk add --no-cache curl确保curl被安装在容器D中
  2. 通过挂载这样的存储添加套接字到容器D内的主机的Docker: dokku storage:mount D /var/run/docker.sock:/var/run/docker.sock
  3. post-deploy脚本中运行以下命令: curl --unix-socket /var/run/docker.sock -X POST http:/{version-of-docker-api}/containers/{container-name}/restart
  4. 重新启动容器D.

老解答

用@yamenk来回答我自己的问题,使用问题中的示例容器:

  1. 通过在容器D的Dockerfile添加apk add --no-cache docker DockerfileDockerfile在容器D中
  2. 通过挂载这样的存储添加套接字到容器D内的主机的Docker: dokku storage:mount D /var/run/docker.sock:/var/run/docker.sock
  3. 重新启动容器D.