在 Docker Swarm 中,每个容器都有一个任务 ID 和一个容器 ID。鉴于编排器知道它们运行的容器及其容器 ID,为什么还要为它们分配任务 ID?
这两个标识符对于同一个容器都是唯一的,因此它们之间存在一对一的相关性。从这里可以看出,您可以通过以下方式从 Swarm 中的任务 ID 获取容器 ID:
docker inspect -f "{{.Status.ContainerStatus.ContainerID}}" <task_id>
如此处所示,您可以通过以下方式获得相反的结果:
docker inspect --format '{{ index .Config.Labels "com.docker.swarm.task.id"}}' <container_id>
我知道对于连接到编排器的容器,将有更多相关数据与之相关,但是,在我看来,编排器可以根据容器 ID 呈现这些数据,不需要另一个标识符。那么任务 ID 的作用是什么?你能用它完成什么是其他方式无法实现的?
在 AWS ECS 中也有类似的情况,但在 ECS 中,每个任务定义可以有多个容器,并且这些容器将共享一个任务 ID,因此相关性不一定是 1 比 1。