Docker登录验证令牌

Docker登录验证令牌,docker,docker-compose,macos-sierra,dockerhub,codeship,Docker,Docker Compose,Macos Sierra,Dockerhub,Codeship,我正试图从~/.docker/config.json文件中获取docker登录名auth。 但是我在我的config.json文件中看不到auth标记。 这是我的docker版本 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/A

我正试图从
~/.docker/config.json
文件中获取
docker登录名
auth。 但是我在我的
config.json
文件中看不到
auth
标记。 这是我的docker版本

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
当我运行
cat~/.docker/config.json
时,我看到的是

cat .docker/config.json
{
    "auths": {
        "https://index.docker.io/v1/": {}
    },
    "credsStore": "osxkeychain"
}%
根据密码,我应该去看看

{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "auth_key",
            "email": "email"
        }
    }
}
我可以禁用在keychain中存储我的authkey吗

我真的需要获得
auth_key
,我怎样才能获得它


谢谢

Auth只是一个base64编码的“用户名:密码”字符串。您可以使用以下命令获取它:

echo -n 'username:password' | base64
使用比在
config.json
文件中存储base64编码的凭据更安全。在您的情况下,docker使用Mac OS的本机密钥链(即osxkeychain)作为凭证存储

现在,对于从
osxkeychain
获取凭据的问题,您可以使用

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

  • 下载发行版
  • 提取并将其移动到
    /usr/local/bin
    或将其路径添加到
    $path
    变量。以便您能够在全球范围内访问它
  • 在终端
    echo”“| docker credential osxkeychain get
    中执行此命令。如果要查找
    服务器url
    ,请使用此命令
    docker credential osxkeychain list
  • 获取go代码中的凭证:

    package main import ( "fmt" osx "github.com/docker/docker-credential-helpers/client" ) func main() { p := osx.NewShellProgramFunc("docker-credential-osxkeychain") creds, err := osx.Get(p, "server-url") if err != nil { fmt.Println(err) } fmt.Printf("Got credentials for user `%s` in `%s` with secret `%s` \n", creds.Username, creds.ServerURL, creds.Secret) } 包干管 进口( “fmt” osx“github.com/docker/docker凭证助手/客户端” ) func main(){ p:=osx.NewShellProgramFunc(“docker凭证osxkeychain”) creds,err:=osx.Get(p,“服务器url”) 如果错误!=零{ fmt.Println(错误) } fmt.Printf(“获取了用户“%s”在“%s”中的凭据,其中包含机密“%s”\n”、creds.Username、creds.ServerURL、creds.secret) }
    使用macos,您需要编写一个config.json文件,模板如下:

    {
        "auths": {
            "hub.xxx.com": {
                "username": "xxx",
                "password": "xxx",
                "email": "xxx",
                "auth": "base64(username:password)"
            }
        }
    }
    

    如果您正在使用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
    
    这将创建带有JSON的
    docker secret.yaml

    如果不包括
    --dry run
    -o yaml>docker secret.yaml
    它将创建k8s secret

    我也有这个问题;我通过从JSON文件中删除
    “credstore”
    键来修复它。下次我运行
    docker login
    时,它给了我一个警告,但将auth令牌保存到该文件中

    这是我的docker版本:

    $ 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
    
    根据答案,我创建了一个小的“单行程序”,可以轻松地作为复制粘贴指令提供给用户:

    echo-en”---\n请输入Docker注册表登录名:\n用户名:\
    读取规则名称\
    echo-n“密码:”\
    读取-s regpassword\
    回声“\
    echo-n“身份验证令牌:”\
    echo-n“$regusername:$regpassword”| base64\
    取消设置注册表密码\
    未设置规则名;
    
    或“真正的”一行:

    echo-en”---\n请输入Docker注册表登录名:\n用户名:;读取规则名称;echo-n“密码:”;读取-s regpassword;回声“;echo-n“身份验证令牌:”;echo-n“$regusername:$regpassword”| base64;取消设置注册表密码;未设置规则名;
    
    与简单的base64命令相比,它的优点是:它不显示密码输入,因此您无法在bash历史记录中找到清除密码。它还向用户打印清晰的说明

    测试日期:

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

    解决这个问题的最简单方法是在ubuntu内部的某个地方安装旧版本的docker,并在那里生成令牌。不提供答案,因为这很难看。但是有效。检查你的Keychain Access应用程序是否有匹配的密钥我认为这是在mac os上生成auth token的最简单方法,默认情况下,auth token会在mac os Keychain上存储docker凭据…虽然此链接可能会回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@zgue感谢您的审阅,我详细阐述了我的答案。请注意,这将在shell历史记录和kubectl会话中公开您的密码…
    --dry run=true已弃用(布尔值),可以替换为--dry run=client。
    在更改后生效OP知道他需要编写配置文件。他询问在docker登录时如何自动写入配置文件。