在Docker中如何配置網(wǎng)絡(luò)并訪問互聯(lián)網(wǎng)
Docker是一個流行的容器化平臺,可以幫助用戶輕松地創(chuàng)建、部署和運(yùn)行應(yīng)用程序。
在使用Docker時,網(wǎng)絡(luò)配置是一個很重要的問題。
本文將介紹如何在Docker中配置網(wǎng)絡(luò),并訪問互聯(lián)網(wǎng)。
一、配置Docker鏡像源
在Docker中,鏡像源是一個重要的組成部分,因?yàn)樗梢宰屇焖俚叵螺d和安裝Docker鏡像。
以下是如何配置Docker鏡像源的步驟:
1.執(zhí)行以下命令,查看是否在 docker.service
文件中配置過鏡像地址。
systemctl cat docker | grep '\-\-registry\-mirror'
如果該命令有輸出,那么請執(zhí)行 $ systemctl cat docker
查看 ExecStart=
出現(xiàn)的位置,修改對應(yīng)的文件內(nèi)容去掉 --registry-mirror
參數(shù)及其值,并按接下來的步驟進(jìn)行配置。
2.如果以上命令沒有任何輸出,那么就可以在 /etc/docker/daemon.json
中寫入如下內(nèi)容(如果文件不存在請新建該文件):
{ "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ] }
注意,一定要保證該文件符合 json 規(guī)范,否則 Docker 將不能啟動。
之后重新啟動服務(wù)。
sudo systemctl daemon-reloadsudo systemctl restart docker
二、配置Docker容器網(wǎng)絡(luò)
以下是如何配置Docker容器網(wǎng)絡(luò)的步驟:
首先,使用docker pull
命令拉取CentOS鏡像。
docker pull centos
然后,使用docker run
命令啟動CentOS容器,并進(jìn)入容器的命令行界面。
docker run -it centos /bin/bash
接下來,使用vi
命令編輯/etc/resolv.conf
文件,并將nameserver
行更改為您想要使用的DNS服務(wù)器的IP地址。
vi /etc/resolv.conf nameserver 114.114.114.114 nameserver 114.114.115.115
保存并關(guān)閉文件,然后退出編輯器。
重新啟動網(wǎng)絡(luò)服務(wù)以使更改生效。
bashCopy code systemctl restart network
如果出現(xiàn)了下述問題:
[root@18f25a9f1bf3 ~]# systemctl restart network
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
您需要通過此命令啟動您的容器以啟用 systemd。
docker run -d --privileged 鏡像名稱 /usr/sbin/init
其中,--privileged
選項(xiàng)允許容器中的進(jìn)程擁有訪問主機(jī)的所有權(quán)限,鏡像名稱 為要啟動的鏡像名稱。
執(zhí)行完該命令后,會啟動一個新容器,并進(jìn)入容器的命令行界面。
此時可以使用管理員權(quán)限執(zhí)行命令。
-d是后臺運(yùn)行。
可以使用docker exec
命令進(jìn)入正在運(yùn)行的容器并以root用戶身份運(yùn)行shell:
docker exec -u 0 -it <container-id> /bin/bash
其中,-u 0
表示以root用戶身份進(jìn)入容器,-it
表示交互式進(jìn)入容器的終端。
三、解決Docker容器網(wǎng)絡(luò)訪問問題
Docker容器訪問互聯(lián)網(wǎng),一直通過--net=host
參數(shù)間接實(shí)現(xiàn)。
該方式存在弊端,因?yàn)樵撃J浇肈ocker容器的網(wǎng)絡(luò)隔離。
容器共享宿主機(jī)的網(wǎng)絡(luò)命名空間,直接暴露在公共網(wǎng)絡(luò)中,即容器和宿主機(jī)具有相同的IP地址。
而使用橋接網(wǎng)絡(luò)模式,可以避免這種問題,并且更加安全。
方法一:啟用宿主機(jī)路由
啟用命令:
宿主機(jī)的IP路由轉(zhuǎn)發(fā)功能一定要打開,否則所創(chuàng)建的容器無法聯(lián)網(wǎng)!容器run后運(yùn)行下面命令也有效。墻裂推薦。
echo 1 > /proc/sys/net/ipv4/ip_forward
啟用命令后,可以通過docker run
命令加上--net=host
參數(shù)使用Docker容器。
docker run --privileged -tid -p 8000:8000 -p 8088:8088 -p 8042:8042 -p 50070:50070 --net=host 鏡像名稱
注意:
在使用--net=host
參數(shù)時,Docker容器將使用宿主機(jī)的網(wǎng)絡(luò)命名空間,容器中的進(jìn)程直接暴露在公共網(wǎng)絡(luò)中,具有相同的IP地址,因此有安全風(fēng)險(xiǎn)。
方法二:使用自定義網(wǎng)絡(luò)
Docker中的自定義網(wǎng)絡(luò),提供了一種更安全的方式來管理容器間的通信,即使沒有--net=host
參數(shù),也可以使容器聯(lián)網(wǎng)。
自定義網(wǎng)絡(luò)是一種Docker內(nèi)置的網(wǎng)絡(luò)驅(qū)動程序,可以創(chuàng)建一個本地或遠(yuǎn)程的虛擬網(wǎng)絡(luò),讓容器可以使用虛擬網(wǎng)絡(luò)中的IP地址進(jìn)行通信。
以下是使用自定義網(wǎng)絡(luò)的方法。
創(chuàng)建自定義網(wǎng)絡(luò)
docker network create my_network
啟動容器,使用--network
參數(shù)指定要使用的網(wǎng)絡(luò)。
docker run --name container1 --network=my_network -tid busybox docker run --name container2 --network=my_network -tid busybox
查看網(wǎng)絡(luò)連接情況
docker network inspect my_network
以上命令將顯示虛擬網(wǎng)絡(luò)的詳細(xì)信息,包括網(wǎng)絡(luò)的名稱、驅(qū)動程序、子網(wǎng)等。
總結(jié)
通過以上兩種方法可以解決Docker容器網(wǎng)絡(luò)訪問問題。
這些僅為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker部署nginx訪問宿主機(jī)服務(wù)并使用緩存的操作方法
這篇文章主要介紹了docker部署nginx訪問宿主機(jī)服務(wù)并使用緩存的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧2024-04-04docker overlay實(shí)現(xiàn)跨主機(jī)的容器互通的方法
這篇文章主要介紹了docker overlay實(shí)現(xiàn)跨主機(jī)的容器互通,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11docker實(shí)踐之容器的導(dǎo)入與導(dǎo)出
Docker技術(shù)為IT界帶來了巨大的改變,它使得云服務(wù)可以用來共享應(yīng)用和工作流程自動化,使得應(yīng)用可以用組件快速組合,消除了開發(fā)、品質(zhì)保證、產(chǎn)品環(huán)境間的摩擦。這篇文章我們將詳細(xì)的介紹docker容器的導(dǎo)入與導(dǎo)出,感興趣的朋友們下面來一起看看吧。2016-10-10詳解Docker Swarm 在持續(xù)集成測試中的應(yīng)用
本文主要介紹如何利用 Docker Swarm 集群功能和 Selenium Grid 腳本分發(fā)功能,來搭建一個可以動態(tài)擴(kuò)容的 Selenium 自動化腳本執(zhí)行環(huán)境,感興趣的小伙伴們可以參考一下2018-10-10Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn)
本文主要介紹了Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08