![Docker 容器未在 docker-internal DNS 中註冊主機名](https://rvso.com/image/776313/Docker%20%E5%AE%B9%E5%99%A8%E6%9C%AA%E5%9C%A8%20docker-internal%20DNS%20%E4%B8%AD%E8%A8%BB%E5%86%8A%E4%B8%BB%E6%A9%9F%E5%90%8D.png)
我使用 Docker 來實作 Nextcloud 服務。為此,我使用官方的 nextcloud-apache 映像、Nginx 反向代理、certbot 和 MariaDB。真的沒什麼特別的。
我的 docker 實例以叢集模式運行。所有容器與管理器一起在同一主機上運行,每個服務只有一個副本,即標準覆蓋網路。群組是透過使用標準撰寫文件啟動的。
我的設置已經穩定運行了好幾個月,直到昨晚,它神秘地崩潰了。據我所知,沒有任何更新或重新啟動,作業系統(Ubuntu Server LTS)、Docker-CE 或任何映像都沒有(我定期手動執行所有更新,而且我當然沒有在昨晚 4 點)。我找到了 Nextcloud 容器的原因(但我認為這是一個 Docker 問題,因此我的問題在這裡...):
Nginx 反向代理的日誌顯示以下行:
2022/04/06 20:16:45 [error] 10#10: *3 nextcloud-app could not be resolved (3: Host not found), client: 10.135.40.1, server: <redacted>, request: "GET / HTTP/1.1", host: "<redacted>"
Nginx 無法解析後端伺服器,並向客戶端拋出 502/Bad Gateway。
我檢查過,Nextcloud 容器的主機名稱(「nextcloud-app」)確實沒有在 docker-internal DNS 中註冊(每個容器中的 127.0.0.11 下可用)。我可以登入任何容器並觸發 DNS 請求(在after apt-get update && apt-get install iputils-ping dnsutils
容器內運行後),名稱「nextcloud-app」在任何地方都沒有解析。例子:
root@nextcloud-app:/var/www/html# nslookup nextcloud-app
Server: 127.0.0.11
Address: 127.0.0.11#53
** server can't find nextcloud-app: NXDOMAIN
所有其他容器名稱均以其應有的方式解析。解析外部位址也有效。 「nextcloud-app」是僅有的無法解析的容器名稱。
但是,我能直接使用 docker 內部 IP 位址對 nextcloud-app 容器執行 ping 操作。連線正常,只是 DNS 解析失敗。
我不知道如何進一步調試。我已經一週沒有碰我的 compose.yml 檔案了。據我所知,一切都沒有改變。然而,該裝置一夜之間就停止運作了。
如何強制 Nextcloud 容器在 docker-internal DNS 上註冊自己的主機名稱?任何建議表示讚賞。
答案1
我找到了解決方案。這個答案是為將來可能面臨同樣問題的可憐人準備的。
事實證明這畢竟不是 docker 問題。 Nextcloud 在夜間進入維護模式(由於原因尚不清楚,接下來必須進行調查)。不知何故,當處於維護模式時,Nextcloud docker 映像無法在Docker 的DNS 中註冊(因為映像中存在錯誤?),並且情況陷入僵局:沒有DNS 解析,無法透過反向代理存取Nextcloud --> 沒有註意到Nextcloud處於維護模式 --> 永遠處於維護模式,沒有 DNS 解析,...
如果我想到檢查 Nextcloud 是否處於維護模式,就可以節省我幾個小時的調試和頭痛的時間。讓 Nextcloud 退出維護模式只需幾分鐘。現在感覺有點傻。 ;-)