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
使用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
--dry run=true已弃用(布尔值),可以替换为--dry run=client。
在更改后生效OP知道他需要编写配置文件。他询问在docker登录时如何自动写入配置文件。