Windows Docker login 的密碼儲存機制


這篇基本是之前《不安裝 Docker Desktop 使用 Windows Docker 容器》的後續。

在 Heresy 將手邊跑 GitLab Runner 的 Windows 電腦都移除 Docker Desktop、並手動註冊 Docker Daemon 後,直接測試 Docker 基本上都沒問題,但是當實際要跑 GitLab CI/CD 的工作的時候,卻在要執行「docker login」登入自己的 Docker registry 的時候,出現了下面的錯:

Error saving credentials: error storing credentials - err: exec: "docker-credential-wincred": executable file not found in %PATH%, out: ``

單就這個問題,網路上要找資料還算滿簡單的,在《docker-credential-wincred: executable file not found in %PATH%》裡面,就有人提到,在使用者路徑下,可以找到「.docker/config.json」這個檔案,打開後內容會類似下面的樣子:

{
  "auths": {
    "xxx.xxx.xxx:5100": {}
  },
  "credsStore": "wincred"
}

而針對找不到「docker-credential-wincred」的這個問題,只要將最後的「“credsStore": “wincred"」刪除就可以了。
(根據狀況,上面 “auths" : { … } 結尾的「,」也要刪除,以維持 JSON 格式的正確性)


不過後來又認真看了一下,這才發現「docker-credential-wincred」是所謂的 Docker Credential Helpers(GitHub),它的用處是去保護儲存下來的 Docker registry 的資訊。

如果是在不安裝 Docker Desktop 的情況下使用 Docker,在執行「docker login」的時候,應該就會出現下面的警告:

WARNING! Your password will be stored unencrypted in C:\Users\Heresy\.docker\config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store

他的意思就是登入的密碼會以未加密的方法,儲存在「C:\Users\Heresy\.docker\config.json」這個檔案裡(不過也不是直接用明碼存就是)。

而像上面一樣,把「“credsStore": “wincred"」拿掉的話,也會有同樣的警告。

所以,其實如果要講究安全性的話,應該不是把「“credsStore": “wincred"」,而是要在使用者的 config.json 加上去;然後去下載 Docker 提供的「docker-credential-wincred」,然後放在系統可以找到的地方。例如之前有把 C:\docker 加到系統的環境變數裡面,所以其實放到這邊也是個好選擇。

這樣的話,Docker 就會把登入資訊儲存在 Windows 提供的認證管理系統裡了~理論上,安全性應該是會更高一點的。


附註:

  • 如果是安裝 Docker Desktop 的話,應該預設就會提供 wincerd 的相關檔案、設定。
    而這次碰到的問題,基本上應該是移除 Docker Desktop 時沒有將所有對應的檔案都移除的關係。

  • GitLab Runner 由於是用系統服務的形式在跑的,所以他的設定檔在比較奇怪的地方,路徑是「C:\Windows\System32\config\systemprofile\.docker\config.json」,需要系統管理者權限。

  • wincerd 的認證在 Windows 10 下可以透過搜尋「管理 Windows 認證」,找到管理的介面。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.