我有两个容器:A
和B
。每次重新创建容器B
来拾取该容器的新A
时,都需要重新启动容器id
。
没有黑客怎么能做到这一点?
答案 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,因此也许您甚至不需要重新启动?