Docker compose 如果在docker compose中重新创建另一个容器,如何自动重新启动容器?
我有两个容器:Docker compose 如果在docker compose中重新创建另一个容器,如何自动重新启动容器?,docker-compose,Docker Compose,我有两个容器:A和B。每次重新创建容器A以获取该容器的新id时,都需要重新启动容器B 没有黑客怎么能做到这一点呢?这不是我以前尝试过的,但是。。docker守护进程在某些事情发生时发出事件。您可以在上看到其中一些,但例如: Docker容器报告以下事件: 附加 犯罪 复制 创造 破坏 拆卸 死亡 执行创建 行政主任 执行程序启动 出口 健康状况 杀死 噢 暂停 改名 调整大小 重新启动 开始 停止 顶部 取消暂停 更新 默认情况下,在单个docker主机上,您可以通过unix套接字与守护进程对话
A
和B
。每次重新创建容器A
以获取该容器的新id
时,都需要重新启动容器B
没有黑客怎么能做到这一点呢?这不是我以前尝试过的,但是。。docker守护进程在某些事情发生时发出事件。您可以在上看到其中一些,但例如: Docker容器报告以下事件: 附加 犯罪 复制 创造 破坏 拆卸 死亡 执行创建 行政主任 执行程序启动 出口 健康状况 杀死 噢 暂停 改名 调整大小 重新启动 开始 停止 顶部 取消暂停 更新 默认情况下,在单个docker主机上,您可以通过unix套接字与守护进程对话
/var/run/docker.sock
。还可以将该unix套接字绑定到容器中,以便从容器中捕获事件。下面是一个简单的docker compose.yml
,它可以:
version: '3.2'
services:
container_a:
image: nginx
container_name: container_a
container_b:
image: docker
container_name: container_b
command: docker events
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
使用docker compose up-d
启动此堆栈。然后,在一个终端中运行docker logs-f container\u b
。在另一个终端中,运行docker restart container\u a
,您将在日志窗口中看到一些显示容器重新启动的事件。您的应用程序可以使用docker客户端库捕获这些事件,然后终止自身并等待重新启动,或者以其他方式安排重新启动或重新配置
请注意,这些事件实际上会告诉您新容器的ID,因此您甚至不需要重新启动?谢谢,非常有用。在我的示例中,我实际上为容器B创建了一个
HEALTHCHECK
。当重新创建返回退出代码1的容器A(基于某些bash逻辑)并由autoheal
awesome自动重新启动时,状态会从正常变为不正常。healthcheck听起来不错,很高兴它有帮助:)