Linux 如何在不首先使用“Docker登录”的情况下为Docker命令提供凭据?

Linux 如何在不首先使用“Docker登录”的情况下为Docker命令提供凭据?,linux,docker,containers,cloud,Linux,Docker,Containers,Cloud,我想知道是否可以为Docker命令(如Docker pull)的远程注册表提供凭据或docker运行而不首先使用docker登录 原因是我想提供HTTP Basic Auth中的凭据(内联),这样我就不必创建~/.docker/config.json 试验:@似乎不起作用,至少对我来说是这样。这可以通过curl或等效工具使用Docker HTTP API来实现 见正式文件: 引擎API是由Docker引擎提供服务的HTTP API。这就是API Docker客户端用于与引擎通信,因此 Docke

我想知道是否可以为Docker命令(如
Docker pull)的远程注册表提供凭据
docker运行而不首先使用
docker登录

原因是我想提供HTTP Basic Auth中的凭据(内联),这样我就不必创建
~/.docker/config.json


试验
:@
似乎不起作用,至少对我来说是这样。

这可以通过
curl
或等效工具使用Docker HTTP API来实现

见正式文件:

引擎API是由Docker引擎提供服务的HTTP API。这就是API Docker客户端用于与引擎通信,因此 Docker客户端可以通过API完成

大多数客户端命令直接映射到API端点(例如。 docker ps是GET/containers/json)。值得注意的异常是正在运行 容器,它由几个API调用组成

逆向工程

首先创建一个Unix套接字,用于检查
docker
客户端请求:

socat -v UNIX-LISTEN:/tmp/fake,fork UNIX-CONNECT:/var/run/docker.sock
接下来,使用
docker
客户端运行
docker pull…

docker -H unix:///tmp/fake pull db-docker-xsrt-rt.artifactory.example.net/aquasec/kube-hunter
docker
客户端和
dockerd
服务器之间发送的HTTP流量:

> 2021/04/13 12:42:21.445593  length=80 from=0 to=79
GET /_ping HTTP/1.1\r
Host: docker\r
User-Agent: Docker-Client/18.09.6 (linux)\r
\r
< 2021/04/13 12:42:21.446085  length=212 from=0 to=211
HTTP/1.1 200 OK\r
Api-Version: 1.39\r
Docker-Experimental: false\r
Ostype: linux\r
Server: Docker/18.09.6 (linux)\r
Date: Tue, 13 Apr 2021 10:42:21 GMT\r
Content-Length: 2\r
Content-Type: text/plain; charset=utf-8\r
\r
OK> 2021/04/13 12:42:21.447291  length=401 from=80 to=480
POST /v1.39/images/create?fromImage=db-docker-xsrt-rt.artifactory.example.net%2Faquasec%2Fkube-hunter&tag=latest HTTP/1.1\r
Host: docker\r
User-Agent: Docker-Client/18.09.6 (linux)\r
Content-Length: 0\r
Content-Type: text/plain\r
X-Registry-Auth: <redacted>\r
\r
< 2021/04/13 12:42:21.546168  length=352 from=212 to=563
HTTP/1.1 200 OK\r
Api-Version: 1.39\r
Content-Type: application/json\r
Docker-Experimental: false\r
Ostype: linux\r
Server: Docker/18.09.6 (linux)\r
Date: Tue, 13 Apr 2021 10:42:21 GMT\r
Transfer-Encoding: chunked\r
\r
3d\r
{"status":"Pulling from aquasec/kube-hunter","id":"latest"}\r
\r
45\r
{"status":"Already exists","progressDetail":{},"id":"801bfaa63ef2"}\r
\r
< 2021/04/13 12:42:21.552481  length=811 from=564 to=1374
...
X-Registry-Auth
值进行解码会产生如下结果(编辑):

echo | base64-d
{“用户名”:
POST /v1.39/images/create?fromImage=db-docker-xsrt-rt.artifactory.example.net%2Faquasec%2Fkube-hunter&tag=latest HTTP/1.1\r
Host: docker\r
User-Agent: Docker-Client/18.09.6 (linux)\r
Content-Length: 0\r
Content-Type: text/plain\r
X-Registry-Auth: <redacted>\r
\r
echo <redacted> | base64 -d
{"username":"<redacted","password":"<redacted>","serveraddress":"db-docker-xsrt-rt.artifactory.example.net"}