如何為容器加入憑證?
在公司 Windows 10 開發機上進行 Windows Container for GPU 測試時,在進行 docker build
DirectX 範例時,不斷出現 timeout 的錯誤。連指定容器 DNS 都用上了,還是不行。
偵錯了好久才想到,公司網路環境特別,內部設備上網需包含一張特別的憑證。原本開發機已包含此憑證,上網正常,本以為容器只是透過本機 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 也能進行憑證管理,不過不合適容器環境。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。