
有沒有辦法將整台機器/Docker 守護程式記錄到登錄中?
我所看到的關於 docker 登入和各種專有憑證幫助程式使用的所有內容~/.docker/config.json
,即每個使用者。
我有一種情況,我想從私人註冊表中提取圖像;多個人在這些機器上都具有任意 sudo 存取權限,並且應該能夠針對我們的註冊表使用 Docker。
由於無論如何,Docker 存取都應該被視為對機器的root 存取(即,如果使用者憑證可以執行Docker,則它們不是相互安全的),並且sudo 存取是相同但直接的,所以我想直接切入正題並記錄整個機器無需每個使用者都經歷困難。
我可以提供一個文件,每個人都可以連結到他們的config.json
,但我更希望它從每台電腦上第一次登入時就得到處理。
答案1
我想到了三個選擇:
不要將映像設為私有,而是允許任何人提取可以存取註冊表伺服器的映像。這在環境中相當常見,因為映像應該只包含運行應用程式的庫和二進位文件,而不包含將在運行時注入或儲存在磁碟區中的設定檔、機密或資料。
如果每個人都有 sudo 存取權限,請從 sudo 執行 docker 命令,包括登入。憑證將儲存在 root 使用者的目錄下
~/.docker/config.json
建立您自己的憑證助手,僅將登入資訊輸出到主機。憑證助理介面非常簡單,有 4 個操作(儲存、取得、清單、擦除),可以在 shell 腳本上實現。對於登錄,您可能只需要 get 操作。
該憑證幫助程式腳本可能看起來像一個名為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"
}
}