在Docker中,每個(gè)容器都是自己獨(dú)立的操作系統(tǒng)環(huán)境,因此它們結(jié)構(gòu)化相同,有自己的網(wǎng)絡(luò)協(xié)議棧和文件系統(tǒng),從而避免了可能出現(xiàn)的環(huán)境沖突。然而,連接到容器的方式取決于其背后的系統(tǒng)環(huán)境。
在內(nèi)部,Docker使用一個(gè)虛擬的網(wǎng)絡(luò)橋接器將所有容器連接到一個(gè)單獨(dú)的Docker網(wǎng)絡(luò)中。默認(rèn)情況下,這個(gè)網(wǎng)絡(luò)是已經(jīng)為您設(shè)置的,并且您可以訪問(wèn)容器的IP地址從您的本地機(jī)器上,但是如果您試圖從容器中訪問(wèn)本地計(jì)算機(jī),您將遇到困難。
為解決這個(gè)問(wèn)題,Docker引入了一個(gè)特殊的主機(jī)網(wǎng)絡(luò)模式,通過(guò)該模式,您可以直接訪問(wèn)主機(jī)上的網(wǎng)絡(luò)資源,而不是通過(guò)Docker網(wǎng)絡(luò)。使用這種模式,相當(dāng)于從非Docker容器的網(wǎng)絡(luò)環(huán)境中訪問(wèn)另一個(gè)計(jì)算機(jī)。
$ docker run --net=host yourImageName
當(dāng)您使用該命令來(lái)啟動(dòng)容器時(shí),容器將與主機(jī)共享其網(wǎng)絡(luò)協(xié)議,包括主機(jī)的“l(fā)ocalhost”地址,意味著您現(xiàn)在可以在容器內(nèi)訪問(wèn)主機(jī)上的所有網(wǎng)絡(luò)接口。
但是有一點(diǎn)需要注意的是,使用主機(jī)模式啟動(dòng)容器會(huì)破壞容器的完整性,因?yàn)樗鼈儾辉偈恰案綦x”的,而是直接連接到主機(jī)上。此外,您可能需要根據(jù)您的具體環(huán)境和安全需求禁用此功能。