DTR 設定常見問題


經常有人來信提到這個問題,在這統一把這問題的解決方法做個說明。

在使用 docker pull 命令想要從 DTR (Docker Trusted Registry) 取出 image 的時候,碰到下列的錯誤訊息。

[root@dtr1]# docker pull dtr [dtr-url]
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid


要讓每一個 Docker 節點,能夠順利使用 docker push / docker pull 命令存取 DTR ,
得讓那 Docker 節點能夠信任 DTR 節點的 TLS 憑證,
要取得 DTR CA 可通過 DTR API 下載下來,如以 curl 做範例:
# curl -k https://[dtr-url]/ca -o [dtr-url].crt
然後把 crt 文件更新到作業系統的可信任的憑證清單內。每一作業系統更新配置憑證的方法都不一樣,將另外說明。

注意:上述提到的方法適用於 UCP 叢集內的每一個節點,不論是 manager 角色或 worker 角色。也可用在叢集外的任一 Docker 節點。

另外一種比較簡單但是不推薦的做法是修改 /etc/docker/daemon.json ,設定 DTR 的地址。

如果已經確定每一個 UCP 節點與 DTR 節點的整合已經完成,仍然有問題,
則可能是每個節點作業系統時間同步所導致。

要更新同步每個節點的時間,可以用 ntpd ,
如果是比較新的版本的 RHEL / CentOS 則使用 chronyd ,
# chronyc sources
# chronyc tracking

如果對外網際網路是連通的,或可直接在 crontab 填入 ntpdate 指令,後面加上外部上游 time server ,例如
# ntpdate time.stdtime.gov.tw

當每個節點作業系統時間正確同步之後,就可以順利使用 docker push 或 pull 命令存取 DTR 的資料了。

留言

這個網誌中的熱門文章

Docker 環境下的 Proxy 配置