系統範圍的 Docker 登入?

系統範圍的 Docker 登入?

有沒有辦法將整台機器/Docker 守護程式記錄到登錄中?

我所看到的關於 docker 登入和各種專有憑證幫助程式使用的所有內容~/.docker/config.json,即每個使用者。

我有一種情況,我想從私人註冊表中提取圖像;多個人在這些機器上都具有任意 sudo 存取權限,並且應該能夠針對我們的註冊表使用 Docker。

由於無論如何,Docker 存取都應該被視為對機器的root 存取(即,如果使用者憑證可以執行Docker,則它們不是相互安全的),並且sudo 存取是相同但直接的,所以我想直接切入正題並記錄整個機器無需每個使用者都經歷困難。

我可以提供一個文件,每個人都可以連結到他們的config.json,但我更希望它從每台電腦上第一次登入時就得到處理。

答案1

我想到了三個選擇:

  1. 不要將映像設為私有,而是允許任何人提取可以存取註冊表伺服器的映像。這在環境中相當常見,因為映像應該只包含運行應用程式的庫和二進位文件,而不包含將在運行時注入或儲存在磁碟區中的設定檔、機密或資料。

  2. 如果每個人都有 sudo 存取權限,請從 sudo 執行 docker 命令,包括登入。憑證將儲存在 root 使用者的目錄下~/.docker/config.json

  3. 建立您自己的憑證助手,僅將登入資訊輸出到主機。憑證助理介面非常簡單,有 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"
  }
}

相關內容