![系统范围的 Docker 登录?](https://linux22.com/image/768815/%E7%B3%BB%E7%BB%9F%E8%8C%83%E5%9B%B4%E7%9A%84%20Docker%20%E7%99%BB%E5%BD%95%EF%BC%9F.png)
有没有办法将整个机器/Docker 守护进程记录到注册表中?
我所看到的有关 docker login 和各种专有凭证助手用途的所有内容~/.docker/config.json
都是针对每个用户的。
我遇到一种情况,我想从私有注册表中提取图像;多个人在这些机器上都有任意的 sudo 访问权限,并且应该能够对我们的注册表使用 Docker。
因为无论如何 Docker 访问都应该被视为对机器的 root 访问(即,如果用户能够运行 Docker,则用户凭据就不是相互安全的),并且 sudo 访问是相同的但更直接,所以我想直接切入正题并登录整个机器,而无需每个用户都经历各种麻烦。
我可以提供一个文件,让每个人都可以链接到他们的文件config.json
,但我更希望从每台机器第一次登录时就开始处理它。
答案1
我想到三种选择:
不要将镜像设为私有,而应允许任何人拉取可以访问注册表服务器的镜像。这在环境中相当常见,因为镜像应该只包含运行应用程序所需的库和二进制文件,而不包含运行时注入或存储在卷中的配置文件、机密或数据。
如果每个人都有 sudo 访问权限,请从 sudo 运行 docker 命令,包括登录。凭据将存储在 root 用户的
~/.docker/config.json
制作您自己的凭证助手,仅将登录信息输出到主机。凭证助手接口非常简单,4 个操作(存储、获取、列出、清除)可以在 shell 脚本上实现。对于登录,您可能只需要获取操作。
该凭证帮助程序脚本看起来像一个名为docker-credential-your-helper
(其中your-helper
可以是您选择的名称)的脚本:
#!/bin/sh
your_registry='
{ "ServerURL": "your-registry",
"Username": "your-user",
"Secret": "your-pass"
}
'
if [ "$1" = "get" ]; then
read hostname
case "$hostname" in
your-registry)
echo "${your_registry}"
exit 0
;;
esac
elif [ "$1" = "list" ]; then
echo "your-registry"
fi
# everything else is unhandled
exit 1
使该文件可执行并将其放置在路径中。然后每个用户~/.docker/config.json
都会有一个凭据帮助程序条目(请注意,docker-credential-
此文件中不包含该条目,只有文件名后面的部分):
{
"credHelpers": {
"your-host": "your-helper"
}
}