Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

podman-remote push doesn't report progress like local podman does #11554

Closed
petermorrowdev opened this issue Sep 13, 2021 · 29 comments
Closed

podman-remote push doesn't report progress like local podman does #11554

petermorrowdev opened this issue Sep 13, 2021 · 29 comments
Assignees
Labels
kind/feature Categorizes issue or PR as related to a new feature. locked - please file new issue/PR Assist humans wanting to comment on an old issue or PR with locked comments. needs-design-doc

Comments

@petermorrowdev
Copy link

Is this a BUG REPORT or FEATURE REQUEST? (leave only one on its own line)

/kind feature

Description

When I run...

podman push local-image:0.1.0

Podman doesn't provide any feedback in the console about the progress of the push, like docker push does. Here's an example of what docker push outputs:

5f70bf18a086: Layer already exists
8bf241318f53: Pushed
d52afa62be4e: Layer already exists
81ef556fc488: Layer already exists
7a96378a28ad: Layer already exists
6958c02f8269: Layer already exists
b0d9eeecffb2: Layer already exists
465b8dc34802: Layer already exists
21bdddc89f96: Layer already exists
27648fb13b80: Layer already exists
1319ff37d4a9: Layer already exists
0.1.0: digest: sha256:08e70958f0ec7972f8560fbacae1i69144c26e91d69352a8n107d70d8a2e9e51 size: 2632

It also will show the size and progress of each layer as it's pushing. This feedback is something many docker users are familiar with and gives the user assurance that podman is doing what it's supposed to.

Steps to reproduce the issue:

  1. Run podman push $IMAGE_TAG on any image you have locally.

  2. Confirm that the console does not provide progress feedback.

Describe the results you received:

No results.

Describe the results you expected:

Described above.

Output of podman version:

Client:
Version:      3.3.1
API Version:  3.3.1
Go Version:   go1.17
Built:        Mon Aug 30 12:15:26 2021
OS/Arch:      darwin/amd64

Server:
Version:      3.3.1
API Version:  3.3.1
Go Version:   go1.16.6
Built:        Mon Aug 30 13:46:36 2021
OS/Arch:      linux/amd64

Output of podman info --debug:

host:
  arch: amd64
  buildahVersion: 1.22.3
  cgroupControllers: []
  cgroupManager: systemd
  cgroupVersion: v2
  conmon:
    package: conmon-2.0.29-2.fc34.x86_64
    path: /usr/bin/conmon
    version: 'conmon version 2.0.29, commit: '
  cpus: 1
  distribution:
    distribution: fedora
    version: "34"
  eventLogger: journald
  hostname: localhost
  idMappings:
    gidmap:
    - container_id: 0
      host_id: 1000
      size: 1
    - container_id: 1
      host_id: 100000
      size: 65536
    uidmap:
    - container_id: 0
      host_id: 1000
      size: 1
    - container_id: 1
      host_id: 100000
      size: 65536
  kernel: 5.13.13-200.fc34.x86_64
  linkmode: dynamic
  memFree: 1276092416
  memTotal: 2061852672
  ociRuntime:
    name: crun
    package: crun-1.0-1.fc34.x86_64
    path: /usr/bin/crun
    version: |-
      crun version 1.0
      commit: 139dc6971e2f1d931af520188763e984d6cdfbf8
      spec: 1.0.0
      +SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +YAJL
  os: linux
  remoteSocket:
    exists: true
    path: /run/user/1000/podman/podman.sock
  security:
    apparmorEnabled: false
    capabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT
    rootless: true
    seccompEnabled: true
    seccompProfilePath: /usr/share/containers/seccomp.json
    selinuxEnabled: true
  serviceIsRemote: true
  slirp4netns:
    executable: /usr/bin/slirp4netns
    package: slirp4netns-1.1.12-2.fc34.x86_64
    version: |-
      slirp4netns version 1.1.12
      commit: 7a104a101aa3278a2152351a082a6df71f57c9a3
      libslirp: 4.4.0
      SLIRP_CONFIG_VERSION_MAX: 3
      libseccomp: 2.5.0
  swapFree: 0
  swapTotal: 0
  uptime: 25h 36m 24.84s (Approximately 1.04 days)
registries:
  search:
  - registry.fedoraproject.org
  - registry.access.redhat.com
  - docker.io
  - quay.io
store:
  configFile: /var/home/core/.config/containers/storage.conf
  containerStore:
    number: 0
    paused: 0
    running: 0
    stopped: 0
  graphDriverName: overlay
  graphOptions: {}
  graphRoot: /var/home/core/.local/share/containers/storage
  graphStatus:
    Backing Filesystem: xfs
    Native Overlay Diff: "true"
    Supports d_type: "true"
    Using metacopy: "false"
  imageStore:
    number: 47
  runRoot: /run/user/1000/containers
  volumePath: /var/home/core/.local/share/containers/storage/volumes
version:
  APIVersion: 3.3.1
  Built: 1630356396
  BuiltTime: Mon Aug 30 20:46:36 2021
  GitCommit: ""
  GoVersion: go1.16.6
  OsArch: linux/amd64
  Version: 3.3.1

Package info (e.g. output of rpm -q podman or apt list podman):

I'm pushing images from MacOS, so I ran brew desc podman here...

podman: Tool for managing OCI containers and pods

Have you tested with the latest version of Podman and have you checked the Podman Troubleshooting Guide? (https://github.com/containers/podman/blob/master/troubleshooting.md)

Yes

Additional environment details (AWS, VirtualBox, physical, etc.):

I asked about this in the #crio Kubernetes Slack Channel and was told to report an issue here, so here I am.

Thanks! 🤗

@openshift-ci openshift-ci bot added the kind/feature Categorizes issue or PR as related to a new feature. label Sep 13, 2021
@afbjorklund
Copy link
Contributor

afbjorklund commented Sep 13, 2021

I'm pushing images from MacOS

I think that is your problem, it is yet another shortcoming of podman-remote

When pushing (and pulling) images with podman on Linux, there is progress...

Getting image source signatures
Copying blob 6cb051b7bcc1 skipped: already exists  
Copying blob d00da3cd7763 skipped: already exists  
Copying blob 4e61e63529c2 skipped: already exists  
Copying blob 45b0de752fd9 skipped: already exists  
Copying blob 78744c48c9d3 skipped: already exists  
Copying blob d1d5915c84e4 skipped: already exists  
Copying blob 799760671c38 done  
Copying blob 8555e663f65b done  
Copying blob 7cf0f434f498 [====================>-----------------] 288.0MiB / 512.7MiB

Maybe try running podman over ssh instead ? (podman machine ssh podman)

@afbjorklund
Copy link
Contributor

afbjorklund commented Sep 13, 2021

Side note: info would be more useful, if this also included the "variant" ?

  distribution:
    distribution: fedora
    variant: coreos
    version: "34"

systemd's /etc/os-release:

NAME=Fedora
VERSION="34.20210904.1.0 (CoreOS)"
ID=fedora
VERSION_ID=34
VERSION_CODENAME=""
PLATFORM_ID="platform:f34"
PRETTY_NAME="Fedora CoreOS 34.20210904.1.0"
...
VARIANT="CoreOS"
VARIANT_ID=coreos
...

Not sure why it is being called distribution.distribution, instead of distribution.name ?

I fully understand why it is called "distribution" and not "operating system", though...

[core@localhost ~]$ sudo docker info | grep Operating
 Operating System: Fedora CoreOS 34.20210904.1.0

@mheon
Copy link
Member

mheon commented Sep 13, 2021

@jwhonce PTAL, I think we need to add progress support to the push endpoints for APIv2.

@petermorrowdev
Copy link
Author

Maybe try running podman over ssh instead ? (podman machine ssh podman)

That works, but I'm pushing to a private registry (gcr.io), so I'd need to set up authentication to GCP on that machine. I'll just tough it out without the progress. It would be nice to have on MacOS though. Thanks!

@vrothberg
Copy link
Member

Note that this may require some massaging in containers/image. The progress bars are only using stdout if it's TTY (see https://github.com/containers/image/blob/main/copy/copy.go#L223-L226). Probably need to hijack the connection in the server (opt-in)?

@jwhonce WDYT?

@jwhonce
Copy link
Member

jwhonce commented Sep 28, 2021

@vrothberg If we pull the TTY test into the caller code then it can decide whether and how to present to the "user". I would suggest a cancelable channel to pass back the progress.

@github-actions
Copy link

A friendly reminder that this issue had no activity for 30 days.

@rhatdan
Copy link
Member

rhatdan commented Oct 29, 2021

@jwhonce @vrothberg any progress on this?

@vrothberg
Copy link
Member

Not to my knowledge.

@github-actions
Copy link

A friendly reminder that this issue had no activity for 30 days.

@rhatdan rhatdan added volunteers-wanted Issues good for community/volunteer contributions and removed stale-issue labels Nov 29, 2021
@github-actions
Copy link

A friendly reminder that this issue had no activity for 30 days.

@github-actions
Copy link

A friendly reminder that this issue had no activity for 30 days.

@github-actions
Copy link

github-actions bot commented Mar 3, 2022

A friendly reminder that this issue had no activity for 30 days.

@github-actions
Copy link

github-actions bot commented Apr 3, 2022

A friendly reminder that this issue had no activity for 30 days.

@github-actions
Copy link

github-actions bot commented May 6, 2022

A friendly reminder that this issue had no activity for 30 days.

@flavianmissi
Copy link

do we need an issue to track the change needed in containers/image?

@vrothberg vrothberg changed the title podman push doesn't report progress like docker push does podman-remote push doesn't report progress like local podman does Jul 13, 2022
@vrothberg
Copy link
Member

@jmguzik this may be something for you :)

@jmguzik
Copy link
Contributor

jmguzik commented Jul 13, 2022

/assign @jmguzik
Not right now, but will look at it in the coming days.

@jmguzik
Copy link
Contributor

jmguzik commented Jul 18, 2022

In the scope of #14886 I implemented a solution similar to the docker one (for pull operation), but there is another option that has to be explored for which I, unfortunately, don't have time right now. The attached PR should provide more information. cc @vrothberg

@jmguzik
Copy link
Contributor

jmguzik commented Jul 18, 2022

/unassign @jmguzik

@vrothberg vrothberg added needs-design-doc and removed volunteers-wanted Issues good for community/volunteer contributions labels Jul 18, 2022
@vrothberg
Copy link
Member

Thanks for pushing things forward, @jmguzik!

I added the needs-design-doc label to make sure we find consensus on the design before continuing implementing.

@BlaineEXE
Copy link

Responding here in response to an idea in #14886, I don't think it's necessary to keep the exact same progress bar output. From my staindpoint, the progress output is for interactive, human-readable sessions, and I just want to see the general progress and make sure things aren't stuck.

I don't see why anyone would write scripts around the progress bars. Scripting should be done via return codes and formatted output like JSON.

@rhatdan
Copy link
Member

rhatdan commented Jul 18, 2022

I agree they don't need to be the same. Just similar.

@jmguzik
Copy link
Contributor

jmguzik commented Jul 18, 2022

@rhatdan I think it's not about the appearance, but more about the approach. Further details and the discussion in the attached PR #14886

@vrothberg
Copy link
Member

Thanks, @jmguzik. Let's not have the same conversations across multiple PRs and issues.

The pros and cons are outlined in #14886 but there is no consensus yet. I think we need to continue experimenting before making a final decision.

@umohnani8
Copy link
Member

Being worked on in #15022

@jmguzik
Copy link
Contributor

jmguzik commented Jul 21, 2022

@umohnani8 I think #15022 is about fixing to have any output and not moving forward with progress bars.
cc @vrothberg

@vrothberg
Copy link
Member

#15022 will fix this issue. podman-remote push will then behave as pull does and print progress but won't render progress bars (yet).

@vrothberg
Copy link
Member

@umohnani8 I think #15022 is about fixing to have any output and not moving forward with progress bars. cc @vrothberg

Yes, that is the request in this issue. Once we have figured out how pull progress bars will work, the ones for push will work in the same way.

mheon pushed a commit to mheon/libpod that referenced this issue Jul 26, 2022
`podman-remote push` has shown absolutely no progress at all. Fix that
by doing essentially the same as the remote-pull code does.

The get-free-out-of-jail-card for backwards compatibility is to let the
`quiet` parameter default to true.  Since the --quioet flag wasn't
working before either, older Podman clients do not set it.

Also add regression tests to make sure we won't regress again.

Fixes: containers#11554
Fixes: containers#14971
Signed-off-by: Valentin Rothberg <[email protected]>
@github-actions github-actions bot added the locked - please file new issue/PR Assist humans wanting to comment on an old issue or PR with locked comments. label Sep 20, 2023
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Sep 20, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
kind/feature Categorizes issue or PR as related to a new feature. locked - please file new issue/PR Assist humans wanting to comment on an old issue or PR with locked comments. needs-design-doc
Projects
None yet
Development

No branches or pull requests

10 participants