近期公司在給客戶安裝部署項目時,由于客戶電腦處于無任何網絡下,因此需要宿主機與容器之間可以互相訪問;但是,由于容器的特性,localhost和127.0.0.1在容器中都是指向容器內,而不是宿主機,因此需要調整。
通過我大量搜索和實踐,發現網上教的什么自定義網絡和修改容器啟動指定net網絡都不太好用,最后通過實踐發現了更方便的方法。
這里用win10測試,家庭版、專業版都適用(Linux本身有網卡,可不使用docker的虛擬網卡,不過使用docker的虛擬網卡ip也是好使的)。
首先啟動你的docker,然后Win + R ,輸入cmd回車,在命令行輸入ipconfig,查看ip
從圖中可看見,192.168.99.1就是docker的虛擬網卡ip,使用Docker desktop啟動的docker就是如圖的適配器名稱,使用Docker toolbox部署的docker,網卡適配器名稱是VirtualBox。
接著使用ping命令來ping這個docker虛擬網卡地址
ping 192.168.99.1
訪問成功效果:
接著,進入docker容器內ping這個網卡ip地址
#進入容器 docker exec -it <容器ID> /bin/bash #ping網卡ip地址 ping 192.168.99.1 #若未安裝ping命令,使用以下命令進行下載 apt-get update apt-get install -y inetutils-ping 或 apt-get install iputils-ping
ping成功效果:
由此可發現,宿主機與容器都可以ping通192.168.99.1這個ip地址,那么我們就可以使用這個ip地址來進行宿主機和容器直接的訪問啦。
作者踩的坑:我自己在度娘里遨游的時候,找到了兩種方法,一個是建立一個容器網絡network,將容器放入這個容器網絡中,這種方式只能實現容器與容器直接的快速交互, 若用docker虛擬網卡ip其實也可以互相訪問,沒必要建立容器網絡。
二是將容器暴露在宿主機上,創建容器時增加–net=host,但是這種啟動方式存在缺陷,就是端口不能進行映射了,即-p 8080:80 這個命令不能使用了,這樣很容易端口沖突,導致容器無法訪問;若進行生產環境部署時,十分不建議使用,當端口沖突時,十分不易察覺。
總結