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

时间:2017-12-11 08:18:14

标签: docker dokku

我有一个项目使用Dokku在一台服务器上运行多个Web应用程序。让我们想象一下网络应用程序/容器是A,B和C,然后我有一个容器D,它不是Web应用程序,但它是容器A,B和C之间共享代码库的集合(例如DB)模型定义,配置等)。

一切都很好,但问题是当更新容器D时,我需要重新启动所有其他容器(A,B和C),以便他们可以看到应用的更改。我的第一个想法是在容器D中有一个脚本,它将在post-deploy触发器上执行,但由于这个脚本将在容器内运行,这意味着它无法访问主机的文件。

由于我最近才开始使用Dokku,我想知道在容器D成功部署后简单执行此操作最简单的方法是什么:

dokku ps:restart A
dokku ps:restart B
dokku ps:restart C

2 个答案:

答案 0 :(得分:1)

您可以使用"部署后"脚本选项。您可以将docker socket安装到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 ...

答案 1 :(得分:0)

感谢@yamenk,完整的答案是:

  1. 通过在curl内为容器D添加apk add --no-cache curl,确保在容器D中安装Dockerfile
  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
  5. OLD ANSWER

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

    1. 通过在docker内为容器D添加apk add --no-cache docker,确保在容器D中安装Dockerfile
    2. 通过安装存储器,将容器添加到容器D内的主机Docker:dokku storage:mount D /var/run/docker.sock:/var/run/docker.sock
    3. 重新启动容器D
相关问题