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