Понимание вывода `docker-compose pull`

Когда я бегу docker-compose pull для проекта с большим количеством сервисов я вижу следующий результат:

...
Pulling service1     ... downloading (64.0%)
Pulling service2     ... downloading (79.3%)
Pulling service3     ... downloading (64.0%)  
...

Кажется, что цифры увеличиваются и уменьшаются, а иногда они обновляются одновременно для нескольких служб. Что означает этот результат и как понять фактический прогрессdocker-compose pull?

3 ответа

Он извлекает различные образы докеров, указанные в службах вашего файла docker-compose. Он будет тянуть несколько уровней для каждой службы параллельно, если это возможно, поэтому вы можете увидеть разные результаты для каждой.

В большинстве файлов compose есть несколько служб. Часто эти службы создаются не из локального Dockerfile, а скорее ссылаются на образ в удаленном репозитории. Каждая служба состоит из нескольких слоев изображений.

По умолчанию docker-compose pullбудет обновлять все службы параллельно (подробнее см. в официальной документации). Процент указан для определенного уровня в этой службе, которая загружается и обновляется. Поскольку изображение может иметь много слоев разного размера, это число может колебаться при использовании этой команды.

На самом деле, по моему опыту, docker-compose просто неправильно обрабатывает уровень докеров.

Если вы запустите docker inspect, вы получите список "слоев", когда вы выполните команду docker-compose, и он получит каждый из них соответственно.

Если вы запустите:

docker pull ubuntu:latest

Вы получите такой результат:

latest: Pulling from library/ubuntu
a4a2a29f9ba4: Pull complete
127c9761dcba: Pull complete
d13bf203e905: Pull complete
4039240d2e0b: Pull complete
Digest: sha256:35c4a2c15539c6c1e4e5fa4e554dac323ad0107d8eb5c582d6ff386b383b7dce
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Вы заметите, что было извлечено, загружено и извлечено 4 слоя.

Когда я запускаю docker-compose pull, предполагая, что ему нужно снова вытащить все 4 слоя, статус% просто выходит из строя, поскольку он показывает вам статус определенного слоя, и как только он будет выполнен, он покажет вам статус следующего. скачивать.

т.е.

Докер:

layer1: 50%
layer2: 70%      

вывод docker-compose: 50%

как только статус докера:

layer1: 100%
layer2: 80%  

вывод docker-compose: 80% (т.е. i падает со 100% до 80%, так как идет загрузка другого уровня)

При этом, это плохой пользовательский шаблон и сбивает с толку, но я считаю, что это то, что происходит под капотом. Настоящий разработчик docker-compose может исправить меня, если я ошибаюсь.

Другие вопросы по тегам