如果在docker-compose中重新创建了另一个容器,如何自动重启容器?

时间:2018-10-16 23:17:15

标签: docker-compose

我有两个容器:AB。每次重新创建容器B来拾取该容器的新A时,都需要重新启动容器id

没有黑客怎么能做到这一点?

1 个答案:

答案 0 :(得分:2)

这不是我以前尝试做的事情,但是.. docker守护进程在某些事情发生时会发出事件。您可以在https://docs.docker.com/engine/reference/commandline/events/#parent-command上看到其中的一些,例如:

  

Docker容器报告以下事件:

     

附加   承诺   复制   创建   破坏   分离   死   exec_create   exec_detach   exec_start   出口   健康状况   杀   oom   暂停   改名   调整大小   重新开始   开始   停   最佳   暂停   更新

默认情况下,您可以在单个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_b。在另一个终端中,运行docker restart container_a,您将在日志窗口中看到一些事件,这些事件表明容器正在重启。您的应用程序可以使用docker客户端库捕获这些事件,然后自行终止并等待重新启动,或者以其他方式安排重新启动或重新配置。

请注意,这些事件实际上会告诉您新容器的ID,因此也许您甚至不需要重新启动?