Actually my experience has been that docker-compose just doesn't handle the docker layer correctly.
If you run docker inspect you'll get a list of 'Layers' when you do a docker-compose pull it fetches each of them respectively.
If you run:
docker pull ubuntu:latest
You'll get an output like this:
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
You'll notice that there were 4 Layers that were pulled, downloaded, and extracted.
When I run docker-compose pull, assuming it needs to pull all 4 layers again, the % status just goes haywire since it's showing you the status of a specific layer, and once it's done it'll show you the status of the next one to download.
ie.
Docker:
layer1: 50%
layer2: 70%
docker-compose output: 50%
once docker status is:
layer1: 100%
layer2: 80%
docker-compose output: 80% (ie. i drops down from 100% to 80% since there is another layer downloading)
That being said, it's a bad user pattern and confusing but I believe that's what's going on under the hood. An actual docker-compose dev can correct me if i'm wrong.