如何知道docker是否已登录docker注册表服务器

Vil*_*oja 83 docker

我不确定我是否已使用cmd:docker login登录到cmd行的docker注册表.如何在不尝试推送的情况下测试或查看您是否已登录?

Fra*_*ere 39

编辑

您可以登录docker docker login <repository>

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If 
you don't have a Docker ID, head over to https://hub.docker.com to 
create one.
Username:
Run Code Online (Sandbox Code Playgroud)

如果您已经登录,则提示符如下所示:

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If 
you don't have a Docker ID, head over to https://hub.docker.com to 
create one.
Username (myusername):
Run Code Online (Sandbox Code Playgroud)

以下答案已过时,docker info不再显示用户名信息.

历史性

登录后,您的用户名和注册表将显示在docker info命令中

像这样:

[ciccio@consolecowboy.net ~]$ docker info
Containers: 12
 Running: 2
..etc...
...
Username: francobolli
Registry: https://index.docker.io/v1/
Run Code Online (Sandbox Code Playgroud)

编辑:注意; 这仅适用于index.docker.io回购.登录仅在需要时将凭据存储在磁盘上,例如在运行时docker pull localhost:5000/imagedocker pull quay.io/username/reponame.

在此问题的评论中指出后编辑:我如何判断我是否登录了私人码头注册表

  • 最后一个链接讨论了检查`〜/ .docker/config.json`的内容. (4认同)
  • 码头工人信息不再显示用户名。我在Windows上,使用docker版本18.05.0-ce。 (3认同)
  • 即使对于_index.docker.io_,`docker info`显然也不可靠.目前登录正常,只能看到`Registry`条目,没有`Username`. (2认同)
  • 如果脚本需要检查怎么办? (2认同)
  • docker logout 不会清空 configjson 中的“auths”条目,至少对我来说不是 (2认同)

Arn*_*nab 39

我使用以下两种方法之一进行此检查:

1:查看config.json文件:

如果您登录"private.registry.com",您将看到与以下相同的条目~/.docker/config.json:

"auths": {
    "private.registry.com": {
        "auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
    }
 }
Run Code Online (Sandbox Code Playgroud)

2:再次尝试使用docker登录:

如果您要查看是否已与private.registry.com建立了活动会话,请尝试再次登录:

bash$ docker login private.registry.com
Username (logged-in-user):
Run Code Online (Sandbox Code Playgroud)

如果您得到类似上面的输出,则表示logged-in-user已经有一个活动会话private.registry.com.如果您刚刚被提升为用户名,则表示没有活动会话.


小智 23

您可以执行以下命令来查看您登录时使用的用户名和使用的注册表:

docker system info | grep -E 'Username|Registry'
Run Code Online (Sandbox Code Playgroud)

  • 我登录到私人注册表,但显示信息“注册表:https://index.docker.io/v1/”。不准确或不可靠 (21认同)
  • 不适用于私人回购 (8认同)

Jar*_*kia 8

我的 AWS ECR 构建脚本具有:

ECR_HOSTNAME="${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com"
TOKEN=$(jq -r '.auths["'$ECR_HOSTNAME'"]["auth"]' ~/.docker/config.json)
curl --fail --header "Authorization: Basic $TOKEN" https://$ECR_HOSTNAME/v2/
Run Code Online (Sandbox Code Playgroud)

如果访问 ECR 失败,则完成登录:

aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin https://$ECR_HOSTNAME
Run Code Online (Sandbox Code Playgroud)

为此,无法使用正确的 Docker 凭证存储。假定默认凭证存储为~/.docker/config.json


Wil*_*hes 6

对于私有注册表, 中不显示任何内容docker info。但是,注销命令会告诉您是否已登录:

 $ docker logout private.example.com
 Not logged in to private.example.com
Run Code Online (Sandbox Code Playgroud)

(虽然这将迫使您再次登录。)


Bal*_*Jr. 6

至少在“Docker for Windows”中,您可以看到您是否通过 UI 登录到 docker hub。只需右键单击 Windows 通知区域中的泊坞窗图标: 登录


mcw*_*933 6

如果你想要一个简单的true/false值,你可以通过管道将你docker.jsonjq.

is_logged_in() {
  cat ~/.docker/config.json | jq -r --arg url "${REPOSITORY_URL}" '.auths | has($url)'
}

if [[ "$(is_logged_in)" == "false" ]]; then
  # do stuff, log in
fi
Run Code Online (Sandbox Code Playgroud)

  • 您可以让 `jq` 返回正确的退出代码,然后您不需要进行字符串比较: `is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | 有($url)' ~/.docker/config.json &gt; /dev/null; }; 如果已登录;然后...` (3认同)

tod*_*dsm 5

刚刚查了一下,今天是这样的:

$ docker login
Authenticating with existing credentials...
Login Succeeded
Run Code Online (Sandbox Code Playgroud)

注意:这是在具有最新版本 Docker CE 的 macOS 上,docker-credential-helper - 两者都安装了自制软件。


Chr*_*ian 5

到目前为止,这里的答案并不是那么有用:

  • docker info 不再提供此信息
  • docker logout 给您带来极大的不便-除非您已经知道凭据并且可以轻松地重新登录
  • docker login 响应似乎非常不可靠,并且程序不太容易解析

适用于我的解决方案基于@noobuntu的注释:我认为,如果我已经知道要提取的图像,但是不确定用户是否已经登录,则可以执行以下操作:

try pulling target image
-> on failure:
   try logging in
   -> on failure: throw CannotLogInException
   -> on success:
      try pulling target image
      -> on failure: throw CannotPullImageException
      -> on success: (continue)
-> on success: (continue)
Run Code Online (Sandbox Code Playgroud)

  • 但是有人在https://github.com/moby/moby/issues/15466上指出失败的原因有很多,不仅是登录问题,而且Docker退出状态不允许区分失败的原因。它仍然比其他解决方案要好,但是完整的解决方案将需要对Docker进行补丁。 (2认同)

KCD*_*KCD 5

docker cli凭证方案不出所料简单,只需看看:

cat ~\.docker\config.json

{
  "auths": {
    "dockerregistry.myregistry.com": {},
    "https://index.docker.io/v1/": {}
Run Code Online (Sandbox Code Playgroud)

在Windows上,您还可以查看凭证工具,该工具也会列出用户名,只是为了逛太多;)

. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list

{"https://index.docker.io/v1/":"kcd"}
Run Code Online (Sandbox Code Playgroud)