0

我在公司代理後面使用Drone。 當我在那裏構建Docker容器時,Docker將正確的搜索服務器以及DNS地址插入容器的/etc/resolv.conf。但是,在使用Docker plugin時,只有搜索服務器會被打上補丁,而名稱服務器被設置爲默認的Google名稱服務器(8.8.8.88.8.4.4)。如何在Drone Docker插件中使用自定義DNS設置

這顯然打破了我的構建,因爲我的公司代理DNS地址無法解析爲與其關聯的IP地址。

此行爲是否打算和/或是否有解決方法允許我通過我的代理連接到互聯網?

回答

1

這可以通過爲您的DNS服務器地址提供docker插件配置來解決。請注意,下面的示例使用虛擬IP地址;請用您的實際IP地址替換。

pipeline: 
    docker: 
    image: plugins/docker 
    custom_dns: [ 10.10.0.1, 10.10.0.2 ] 

如果您使用的是企業版,您可以配置以下全局環境變量:

- name: PLUGIN_CUSTOM_DNS 
    value: 10.10.0.1,10.10.0.2 


爲什麼是這個必要嗎?

爲什麼這個問題在一些配置中表面而不是其他的?在這些情況下,爲什麼DNS配置不會在Docker中傳播到Docker?爲什麼這個工作與默認網橋,但不是用戶定義的網絡?不幸的是我目前無法提供根本原因,但可以提供一些可能解釋行爲的信息...

看起來配置DNS的邏輯可能會有所不同,具體取決於您的Docker版本,主機配置等

Docker如何管理容器內的DNS配置的確切細節可以從一個Docker版本更改爲下一個。所以你不應該假定/ etc/hosts,/etc/resolv.conf這樣的文件在容器內部被管理,並且保持文件不變,而是使用下面的Docker選項。

它似乎也默認橋網絡並通過設計表現比用戶定義的橋網絡的不同:

爲了保持向後兼容,在默認橋式網絡的DNS配置被保留,沒有行爲更改。有關默認橋接網絡中DNS配置的更多信息,請參閱默認橋接網絡中的DNS。

我希望我能爲這個問題提供詳細的技術根本原因,並希望有人可以填補這個答案的空白。同時,請使用上述的解決方法。

相關問題