部署另一个容器后重新启动容器
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,完整的答案是:
- 通过在容器 D
的 Dockerfile
内添加 apk add --no-cache curl
确保 curl
安装在容器 D 中
- 通过像这样安装存储将套接字添加到主机的 Docker 容器 D 中:
dokku storage:mount D /var/run/docker.sock:/var/run/docker.sock
- 在
post-deploy
脚本中 运行 以下内容:curl --unix-socket /var/run/docker.sock -X POST http:/{version-of-docker-api}/containers/{container-name}/restart
- 重启容器D
旧答案
在@yamenk 的帮助下使用问题中的示例容器回答我自己的问题:
- 通过在容器 D
的 Dockerfile
中添加 apk add --no-cache docker
确保 docker
安装在容器 D 中
- 通过像这样安装存储将套接字添加到主机的 Docker 容器 D 中:
dokku storage:mount D /var/run/docker.sock:/var/run/docker.sock
- 重启容器D
我有一个项目 运行 在单个服务器上使用 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,完整的答案是:
- 通过在容器 D 的
- 通过像这样安装存储将套接字添加到主机的 Docker 容器 D 中:
dokku storage:mount D /var/run/docker.sock:/var/run/docker.sock
- 在
post-deploy
脚本中 运行 以下内容:curl --unix-socket /var/run/docker.sock -X POST http:/{version-of-docker-api}/containers/{container-name}/restart
- 重启容器D
Dockerfile
内添加 apk add --no-cache curl
确保 curl
安装在容器 D 中
旧答案
在@yamenk 的帮助下使用问题中的示例容器回答我自己的问题:
- 通过在容器 D 的
- 通过像这样安装存储将套接字添加到主机的 Docker 容器 D 中:
dokku storage:mount D /var/run/docker.sock:/var/run/docker.sock
- 重启容器D
Dockerfile
中添加 apk add --no-cache docker
确保 docker
安装在容器 D 中