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

Restart container after another container is deployed

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

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

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

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

您可以使用 "post-deploy" 脚本选项。您可以将 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
  2. Dockerfile 内添加 apk add --no-cache curl 确保 curl 安装在容器 D 中
  3. 通过像这样安装存储将套接字添加到主机的 Docker 容器 D 中:dokku storage:mount D /var/run/docker.sock:/var/run/docker.sock
  4. post-deploy 脚本中 运行 以下内容:curl --unix-socket /var/run/docker.sock -X POST http:/{version-of-docker-api}/containers/{container-name}/restart
  5. 重启容器D

旧答案

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

  1. 通过在容器 D
  2. Dockerfile 中添加 apk add --no-cache docker 确保 docker 安装在容器 D 中
  3. 通过像这样安装存储将套接字添加到主机的 Docker 容器 D 中:dokku storage:mount D /var/run/docker.sock:/var/run/docker.sock
  4. 重启容器D