Gay*_*yan 15 docker codeship dockerhub docker-compose macos-sierra
我正试图docker login从~/.docker/config.json文件中获取身份验证.但我auth在config.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)
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秘密。
我也遇到过这个问题;我通过"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}\nRun Code Online (Sandbox Code Playgroud)\n
使用凭证存储比在config.json文件中存储base64编码的凭证更安全。在您的情况下,泊坞窗将Mac OS的本机钥匙串(即osxkeychain)用作凭据存储。
现在,从中获取证书的问题osxkeychain可以使用docker-credential-helpers。
获取证书的步骤(在终端中):
/usr/local/bin到$PATH变量或将其添加到变量。这样您就可以全局访问它。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)
}
根据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 历史记录中找到明确的密码。它还向用户打印清晰的说明。
测试于:
| 归档时间: |
|
| 查看次数: |
13952 次 |
| 最近记录: |