docker push image to JFrog: “unknown: Authentication is required” message
在本地部署 JFrog Container Registry (jcr)
后,在 docker login
succeed 的情况下,docker pull
或 docker push
都会失败。拿 docker push
举例,它会不断的 Retry
,最后会出现报错 unknown: Authentication is required
~ $: docker push localhost:8082/docker/ubuntu:20.04
The push refers to repository [localhost:8082/docker/ubuntu]
385e7b980443: Retrying in 6 seconds
93fe5700ccde: Retrying in 6 seconds
f8ff53a18f9c: Retrying in 6 seconds
da4cea292524: Retrying in 6 seconds
61aa2b965a31: Retrying in 6 seconds
bfb0540909d7: Waiting
0738501db4be: Waiting
dd430db1a431: Waiting
954c82bdeb5f: Waiting
unknown: Authentication is required” message
这个表示用户鉴权失败,也就是需要用户进行登录。但 docker login
已经成功了,为什么还会出现这样的错误呢?
这是因为 docker login 时使用的 docker registry 域名与 镜像名称上的域名不一致所导致的。
如上图所示, docker repository 的 url 为 http://127.0.0.1:8082/artifactory/docker/
,所以有些人使用它作为域名来进行登录。其实是不需要 artifactory
的,jfrog 服务域名后直接加 repository 的 名字即可。虽然下面两个都能出现登录成功的提示,但第一条命令在执行 push
等操作时会出现 Authentication
的错误。
~ $: docker login http://127.0.0.1:8082/artifactory/docker/ # incorrect
~ $: docker login http://127.0.0.1:8082/docker/ # correct
同时需要注意,镜像名称前缀需要和 login 的一致,即:
docker login http://localhost:8082/docker
localhost:8082/docker/ubuntu:20.04 # 镜像名