我不确定我是否已使用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/image或docker pull quay.io/username/reponame.
在此问题的评论中指出后编辑:我如何判断我是否登录了私人码头注册表
Arn*_*nab 39
我使用以下两种方法之一进行此检查:
如果您登录"private.registry.com",您将看到与以下相同的条目~/.docker/config.json:
"auths": {
"private.registry.com": {
"auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
}
}
Run Code Online (Sandbox Code Playgroud)
如果您要查看是否已与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)
我的 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。
对于私有注册表, 中不显示任何内容docker info。但是,注销命令会告诉您是否已登录:
$ docker logout private.example.com
Not logged in to private.example.com
Run Code Online (Sandbox Code Playgroud)
(虽然这将迫使您再次登录。)
如果你想要一个简单的true/false值,你可以通过管道将你docker.json的jq.
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)
刚刚查了一下,今天是这样的:
$ docker login
Authenticating with existing credentials...
Login Succeeded
Run Code Online (Sandbox Code Playgroud)
注意:这是在具有最新版本 Docker CE 的 macOS 上,docker-credential-helper - 两者都安装了自制软件。
到目前为止,这里的答案并不是那么有用:
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)
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)
| 归档时间: |
|
| 查看次数: |
62751 次 |
| 最近记录: |