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