Docker登录身份验证令牌

Gay*_*yan 15 docker codeship dockerhub docker-compose macos-sierra

我正试图docker login~/.docker/config.json文件中获取身份验证.但我authconfig.json文件中看不到令牌.这是我的泊坞版.

docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Tue Mar 28 00:40:02 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:00:50 2017
 OS/Arch:      linux/amd64
 Experimental: true
Run Code Online (Sandbox Code Playgroud)

当我跑步时cat ~/.docker/config.json,我能看到的是

cat .docker/config.json
{
    "auths": {
        "https://index.docker.io/v1/": {}
    },
    "credsStore": "osxkeychain"
}%
Run Code Online (Sandbox Code Playgroud)

根据Codeship 文档,我应该看看

{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "auth_key",
            "email": "email"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以禁用在钥匙串中存储我的authkey吗?

我真的需要得到auth_key,我怎么能得到它?

谢谢

小智 30

Auth只是一个base64编码的'username:password'字符串.您可以使用以下命令获取它:

echo -n 'username:password' | base64
Run Code Online (Sandbox Code Playgroud)

  • 根据“base64”实现,您可能必须使用“-w”标志禁用换行:“base64 -w 0”。 (3认同)
  • 我认为这是在Mac OS上生成身份验证令牌的最简单方法,默认情况下将Docker凭据存储在Mac OS钥匙串上。 (2认同)

Nic*_*owe 11

如果您使用的是 Kubernetes,并且需要它来创建注册表密码,请运行:

kubectl create secret docker-registry --dry-run=true docker-regcred \
--docker-server=https://index.docker.io/v1/ \
--docker-username=xxx \
--docker-password=xxx \
--docker-email=yourmail@yourdomain.com \
--namespace=xxx \
-o yaml > docker-secret.yaml
Run Code Online (Sandbox Code Playgroud)

这将docker-secret.yaml在那里创建您的 JSON。如果你不包括--dry-run=client-o yaml > docker-secret.yaml它会创建K8S秘密。

  • 请注意,这会将您的密码暴露给您的 shell 历史记录和 kubectl 会话... (5认同)
  • `--dry-run=true 已弃用(布尔值),可以用 --dry-run=client 替换。` 更改后有效 (2认同)

ahu*_*f44 9

我也遇到过这个问题;我通过"credsStore"从该 JSON 文件中删除密钥来修复它。下次我运行时docker login,它给了我一个警告,但将身份验证令牌保存到该文件中。

这是我的码头版本:

$ docker version
Client: Docker Engine - Community
 Version:           19.03.4
 API version:       1.40
 Go version:        go1.13.3
 Git commit:        9013bf5
 Built:             Wed Oct 30 21:32:58 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.10
  Git commit:       9013bf583a
  Built:            Fri Oct 18 15:55:51 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
Run Code Online (Sandbox Code Playgroud)


小智 7

使用macos\xef\xbc\x8c你需要编写一个config.json文件,模板如下:

\n\n
{\n    "auths": {\n        "hub.xxx.com": {\n            "username": "xxx",\n            "password": "xxx",\n            "email": "xxx",\n            "auth": "base64(username:password)"\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n


dar*_*ade 6

使用凭证存储比在config.json文件中存储base64编码的凭证更安全。在您的情况下,泊坞窗将Mac OS的本机钥匙串(即osxkeychain)用作凭据存储。

现在,从中获取证书的问题osxkeychain可以使用docker-credential-helpers

获取证书的步骤(在终端中):

  1. 下载最新版本。
  2. 提取并将其移动/usr/local/bin$PATH变量或将其添加到变量。这样您就可以全局访问它。
  3. 在终端执行该命令echo "<server-url>" | docker-credential-osxkeychain get。如果您想找出server-url使用此命令的方法docker-credential-osxkeychain list

在go代码中获取证书:

包主

导入(
    “ fmt”

    osx“ github.com/docker/docker-credential-helpers/client”
)

func main(){

    p:= osx.NewShellProgramFunc(“ docker-credential-osxkeychain”)

    凭据,错误:= osx.Get(p,“ server-url”)
    如果err!= nil {
        fmt.Println(err)
    }

    fmt.Printf(“为用户“%s”中的用户“%s”使用秘密的“%s` \ n”获得凭据,creds.Username,creds.ServerURL,creds.Secret)
}


moz*_*ozz 5

根据Roman 的回答,我创建了一个小的“一行”,可以轻松地将其作为复制粘贴指令提供给用户:

echo -en "------\nPlease enter Docker registry login:\nUsername: "; \
    read regusername; \
    echo -n "Password: "; \
    read -s regpassword; \
    echo""; \
    echo -n "Auth Token: "; \
    echo -n "$regusername:$regpassword" | base64; \
    unset regpassword; \
    unset regusername;
Run Code Online (Sandbox Code Playgroud)

或者“真正的”一句台词:

echo -en "------\nPlease enter Docker registry login:\nUsername: "; read regusername; echo -n "Password: "; read -s regpassword; echo""; echo -n "Auth Token: "; echo -n "$regusername:$regpassword" | base64; unset regpassword; unset regusername;
Run Code Online (Sandbox Code Playgroud)

相对于简单的 base64 命令的优点:它不显示密码输入,因此您无法在 bash 历史记录中找到明确的密码。它还向用户打印清晰的说明。

测试于:

  • MacOS 中的 zsh 和 bash
  • bash 中的 Ubuntu