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听起来不错,很高兴它有帮助:)