我想知道是否可以为 Docker 命令的远程注册表提供凭据,例如docker pull ... <image>或docker run ... <image>不首先使用docker login?
原因是我想像在 HTTP Basic Auth 中一样提供凭据(内联),这样我就不必创建~/.docker/config.json.
尝试<username>:<password>@<image>似乎不起作用,至少对我来说。
我想知道是否可以为 Docker 命令的远程注册表提供凭据,例如docker pull ... <image>或docker run ... <image>不首先使用docker login?
原因是我想像在 HTTP Basic Auth 中一样提供凭据(内联),这样我就不必创建~/.docker/config.json.
尝试<username>:<password>@<image>似乎不起作用,至少对我来说。
这可以使用 Docker HTTP API viacurl或等效方法来实现。
查看官方文档:https ://docs.docker.com/engine/api/v1.39/#operation/ImageCreate
Engine API 是一个由 Docker Engine 提供的 HTTP API。它是 Docker 客户端用来与 Engine 通信的 API,因此 Docker 客户端可以做的所有事情都可以通过 API 完成。
大多数客户端的命令直接映射到 API 端点(例如 docker ps 是 GET /containers/json)。值得注意的例外是运行容器,它由几个 API 调用组成。
逆向工程:
首先创建一个用于检查docker客户端请求的 Unix 套接字:
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
...
相关部分如下,其中通过HTTP 标头~/docker/config.json提供 Base64 编码的凭据:X-Registry-Auth
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
解码该X-Registry-Auth值会产生类似(已编辑)的内容:
echo <redacted> | base64 -d
{"username":"<redacted","password":"<redacted>","serveraddress":"db-docker-xsrt-rt.artifactory.example.net"}