如何為Linux, Windows容器加入憑證?

如何為容器加入憑證?

在公司 Windows 10 開發機上進行 Windows Container for GPU 測試時,在進行 docker build DirectX 範例時,不斷出現 timeout 的錯誤。連指定容器 DNS 都用上了,還是不行。

docker build - download file timeout

偵錯了好久才想到,公司網路環境特別,內部設備上網需包含一張特別的憑證。原本開發機已包含此憑證,上網正常,本以為容器只是透過本機 NAT 出去,應該只是借道而行,結果是不得其門而入。

補充:Set-DnsClientServerAddress 此 PowerShell 可以設定 DNS。

在一篇 curl certificate fail in docker container 找到在容器放入憑證的方式:

docker cp source dest
/usr/local/share/ca-certificates
update-ca-certificates

我在 Linux Container 使用 Ubuntu Image 測試可以運作。不需要特別改名,當執行 update-ca-certificates 時,它會發現正確的 *.crt 憑證後自動匯入與生效。最後再利用 docker commit 製作一份含憑證的映像檔分層即可。

Windows Container 步驟差不多,就最後的指令不一樣:

docker cp source dest
Import-Certificate -FilePath C:\myCertificate.cert -CertStoreLocation Cert:\LocalMachine\Root\

Windows 容器使用 PowerShell 的 Import-Certificate cmdlet 來進行匯入。

  • -CertStoreLocation cert:\CurrentUser\Root
  • -CertStoreLocation Cert:\LocalMachine\Root

這裡對應到「憑證存放區」。容器裡選擇 LocalMachine 就可。這樣在存取如 HTTPS 時才能正常連線。

補充:Visual Studio 有個 Certmgr.exe 也能進行憑證管理,不過不合適容器環境。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。