Description
Is your feature request related to a problem? Please describe.
See
- my observation in Fix push command skips service #7430 (comment)
- original implementation: Add docker-compose push and docker-compose bundle #3595
The docker-compose push
subcommand has an --ignore-push-failures
option, which ignores any error that occurs when pushing (one of) the images built in the docker-compose.yaml
file.
This flag can be useful for situations where multiple services define a build:
, but (possibly) not all of those images have been build (and are thus missing in the local image cache).
However, currently any error that occurs is ignored. I think this is bad behavior, as this may be hiding important failures (e.g., trying to push when I was not authenticated, trying to push but the registry is not reachable, or perhaps there's a failiure on the registry side).
Here's an example:
docker-compose file:
version: "3.7"
services:
missing:
build:
context: .
dockerfile: Dockerfile.example
image: localhost:5000/foobar:missing
built:
build:
context: .
dockerfile: Dockerfile.example
image: localhost:5000/foobar:built
unreachable:
build:
context: .
dockerfile: Dockerfile.example
image: no-such-registry.example.com:5000/foobar:unreachable
unauthenticated:
build:
context: .
dockerfile: Dockerfile.example
image: docker.io/library/foobar:unauthenticated
Dockerfile.example
FROM busybox
RUN echo "foo" > /foo
Build images for the built
, unreachable
, and unauthenticated
services:
docker-compose build built unreachable unauthenticated
Start a local registry, and push the images with docker-compose push --ignore-push-failures
:
docker run -d --name registry -p 127.0.0.1:5000:5000 registry:2
docker-compose push --ignore-push-failures
Pushing missing (localhost:5000/foobar:missing)...
The push refers to repository [localhost:5000/foobar]
ERROR: tag does not exist: localhost:5000/foobar:missing
Pushing built (localhost:5000/foobar:built)...
The push refers to repository [localhost:5000/foobar]
554895133718: Pushed
5b0d2d635df8: Pushed
built: digest: sha256:2505d8793b4cfe865315715960a4e7eb2fa683f3cafaa7198a0303d9504022a6 size: 734
Pushing unreachable (no-such-registry.example.com:5000/foobar:unreachable)...
The push refers to repository [no-such-registry.example.com:5000/foobar]
ERROR: Get https://no-such-registry.example.com:5000/v2/: Service Unavailable
Pushing unauthenticated (docker.io/library/foobar:unauthenticated)...
The push refers to repository [docker.io/library/foobar]
554895133718: Preparing
5b0d2d635df8: Preparing
ERROR: denied: requested access to the resource is denied
Check the exit-code and see that the command exited succesfully:
echo $?
0
Describe the solution you'd like
I think we should deprecated the existing flag, and replace it with a --skip-missing
or --ignore-missing
flag;
- Without the flag set,
docker-compose push
will fail on any failure that occurs when pushing - If the flag is set, docker compose will check if the image exists locally, and if not, skip pushing of the image
- When skipping an image, it prints an
INFO
message, informing the user that no local image existed, and that pushing was skipped
- When skipping an image, it prints an