docker內(nèi)的容器如何與宿主機共享IP的方法
問題
有個項目里面需要將一些服務(wù)打包到docker鏡像中,打包完成后,發(fā)現(xiàn)有些服務(wù)有問題,主要集中在一些端側(cè)設(shè)備接入用的服務(wù),主要是工業(yè)相機。相機掃描不到。
原因
當(dāng)Docker進程啟動時,會在主機上創(chuàng)建一個名為docker0的虛擬網(wǎng)橋,此主機上啟動的Docker容器會連接到這個虛擬網(wǎng)橋上。虛擬網(wǎng)橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網(wǎng)絡(luò)中。從docker0子網(wǎng)中分配一個IP給容器使用,并設(shè)置docker0的IP地址為容器的默認網(wǎng)關(guān)。這樣容器就在宿主機建立的一個虛擬vlan中,或者叫虛擬局域網(wǎng)中。
而很多設(shè)備的發(fā)現(xiàn)和掃描服務(wù)都是運行在局域網(wǎng)中
比如攝像頭的ONVIF協(xié)議,相機的genicam協(xié)議等。
這就導(dǎo)致了運行在docker中的設(shè)備發(fā)現(xiàn)服務(wù),無法發(fā)現(xiàn)設(shè)備,無法被設(shè)備訪問到。
解決
docker中的容器有四種網(wǎng)絡(luò)方式,默認是bridge的方式。這種就是虛擬vlan了,容器可以訪問外面,也可以映射端口出去。另外一種是host方式,這種方式和宿主機用同一個IP,滿足了需要,可以解決這個問題。
[root@master ~]# docker run -tid --net=bridge --name testhost ubuntu1604 [root@master ~]# docker exec -ti testhost /bin/bash [root@master py_interface]#
host模式下的容器,進入后顯示為主機的名稱而不是一串id,比如
[root@efc2b497dbd6 py_interface]#
進入容器后,ifconfig一下能看到IP和宿主機是一樣的。
到此這篇關(guān)于docker內(nèi)的容器如何與宿主機共享IP的文章就介紹到這了,更多相關(guān)docker容器與宿主機共享IP內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
本地Docker安裝Postgres 12 + pgadmin的方法 (支持Apple M1)
這篇文章主要介紹了本地Docker安裝Postgres 12 + pgadmin的方法 (支持Apple M1),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Docker出現(xiàn)Cannot connect to the Docker daemon. Is the docker d
這篇文章主要介紹了Docker出現(xiàn)Cannot connect to the Docker daemon. Is the docker daemon running on this host錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下2016-12-12詳解在Docker容器中運行Spring Boot應(yīng)用
本文將以一個最簡單的Spring Boot開發(fā)的Web應(yīng)用為例,講解如何將其容器化運行。本文的重點是構(gòu)建Docker鏡像、運行Docker容器。2017-06-06