部署另一个容器后重新启动容器
我有一个使用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完整的答案是:
- 通过在容器D的
Dockerfile
添加apk add --no-cache curl
确保curl
被安装在容器D中 - 通过挂载这样的存储添加套接字到容器D内的主机的Docker:
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
Dockerfile
,Dockerfile
在容器D中 - 通过挂载这样的存储添加套接字到容器D内的主机的Docker:
dokku storage:mount D /var/run/docker.sock:/var/run/docker.sock
- 重新启动容器D.
- 为什么在一个简单的NGINX docker集群上增加node / pod时,我看不到更高的并发请求?
- 我的Procfile应该如何?
- 使用docker容器安装redmine插件
- Gunicorn ImportError:没有名为应用程序的模块
- 在PostgreSQL docker run中用pg_restore恢复数据库
- Docker Compose在v2中注入链接的容器
- docker,docker,撰写,networking:如何configuration?
- Docker + node_modules:尝试运行Dockerfile时接收本地依赖的错误
- 在一个节点上部署Docker堆栈(共同调度Docker群集等容器)