В Docker Swarm каждый контейнер имеет как идентификатор задачи, так и идентификатор контейнера. Учитывая, что оркестраторы знают о контейнерах, которые они запускают, и об их идентификаторах контейнеров, почему они также назначают им идентификатор задачи?
Оба этих идентификатора уникальны для одного и того же контейнера, поэтому между ними существует корреляция 1: 1. Как можно заметить Вот вы можете получить идентификатор контейнера из идентификатора задачи в Swarm через:
docker inspect -f "{{.Status.ContainerStatus.ContainerID}}" <task_id>
И как видно Вот вы можете получить обратное с помощью:
docker inspect --format '{{ index .Config.Labels "com.docker.swarm.task.id"}}' <container_id>
Я понимаю, что для контейнера, который подключен к оркестратору, будут более релевантные данные, связанные с ним, однако мне кажется, что эти данные могут быть представлены оркестратором в соответствии с идентификатором контейнера, и нет необходимости в другом идентификатор. Так в чем же смысл идентификатора задачи? Что вы можете сделать с его помощью, чего нельзя было бы добиться иначе?
В AWS ECS есть аналогичная вещь, однако в ECS у вас может быть несколько контейнеров для каждого определения задачи, и эти контейнеры будут иметь общий идентификатор задачи, поэтому корреляция не обязательно 1 к 1.
Этот ответ основан на ответе Брета Фишера и разговоре с другом. Я могу взять очень частичную заслугу.
В основном TaskID - это объект Swarm, а ContainerID - это объект движка dockerd. У роя должен быть какой-то идентификатор объекта, прежде чем контейнер даже будет запущен, поэтому он создал TaskID. Это можно увидеть в документация докеров, первые три этапа на странице задач предшествуют присвоению идентификатора контейнера, потому что Swarm даже не знает, на каком узле он будет запускаться.
Вот милый эксперимент, чтобы увидеть это в действии:
Третий этап должен запускаться последним, первые два являются взаимозаменяемыми.
watch docker service ps testTask
watch docker ps
docker service create -e MYSQL_ROOT_PASSWORD=my-secret-pw --name testTask mariadb
*Вы увидите TaskID за несколько секунд до ContainerID.
* Скорее всего, этого можно добиться и с другими изображениями, но я бы попробовал относительно большое.