在Docker中如何配置網(wǎng)絡并訪問互聯(lián)網(wǎng)
Docker是一個流行的容器化平臺,可以幫助用戶輕松地創(chuàng)建、部署和運行應用程序。
在使用Docker時,網(wǎng)絡配置是一個很重要的問題。
本文將介紹如何在Docker中配置網(wǎng)絡,并訪問互聯(lián)網(wǎng)。
一、配置Docker鏡像源
在Docker中,鏡像源是一個重要的組成部分,因為它可以讓您快速地下載和安裝Docker鏡像。
以下是如何配置Docker鏡像源的步驟:
1.執(zhí)行以下命令,查看是否在 docker.service 文件中配置過鏡像地址。
systemctl cat docker | grep '\-\-registry\-mirror'
如果該命令有輸出,那么請執(zhí)行 $ systemctl cat docker 查看 ExecStart= 出現(xiàn)的位置,修改對應的文件內容去掉 --registry-mirror 參數(shù)及其值,并按接下來的步驟進行配置。
2.如果以上命令沒有任何輸出,那么就可以在 /etc/docker/daemon.json 中寫入如下內容(如果文件不存在請新建該文件):
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
注意,一定要保證該文件符合 json 規(guī)范,否則 Docker 將不能啟動。
之后重新啟動服務。
sudo systemctl daemon-reloadsudo systemctl restart docker
二、配置Docker容器網(wǎng)絡
以下是如何配置Docker容器網(wǎng)絡的步驟:
首先,使用docker pull命令拉取CentOS鏡像。
docker pull centos
然后,使用docker run命令啟動CentOS容器,并進入容器的命令行界面。
docker run -it centos /bin/bash
接下來,使用vi命令編輯/etc/resolv.conf文件,并將nameserver行更改為您想要使用的DNS服務器的IP地址。
vi /etc/resolv.conf nameserver 114.114.114.114 nameserver 114.114.115.115
保存并關閉文件,然后退出編輯器。
重新啟動網(wǎng)絡服務以使更改生效。
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選項允許容器中的進程擁有訪問主機的所有權限,鏡像名稱 為要啟動的鏡像名稱。
執(zhí)行完該命令后,會啟動一個新容器,并進入容器的命令行界面。
此時可以使用管理員權限執(zhí)行命令。
-d是后臺運行。
可以使用docker exec命令進入正在運行的容器并以root用戶身份運行shell:
docker exec -u 0 -it <container-id> /bin/bash
其中,-u 0表示以root用戶身份進入容器,-it表示交互式進入容器的終端。
三、解決Docker容器網(wǎng)絡訪問問題
Docker容器訪問互聯(lián)網(wǎng),一直通過--net=host參數(shù)間接實現(xiàn)。
該方式存在弊端,因為該模式禁用Docker容器的網(wǎng)絡隔離。
容器共享宿主機的網(wǎng)絡命名空間,直接暴露在公共網(wǎng)絡中,即容器和宿主機具有相同的IP地址。
而使用橋接網(wǎng)絡模式,可以避免這種問題,并且更加安全。
方法一:啟用宿主機路由
啟用命令:
宿主機的IP路由轉發(fā)功能一定要打開,否則所創(chuàng)建的容器無法聯(lián)網(wǎng)!容器run后運行下面命令也有效。墻裂推薦。
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容器將使用宿主機的網(wǎng)絡命名空間,容器中的進程直接暴露在公共網(wǎng)絡中,具有相同的IP地址,因此有安全風險。
方法二:使用自定義網(wǎng)絡
Docker中的自定義網(wǎng)絡,提供了一種更安全的方式來管理容器間的通信,即使沒有--net=host參數(shù),也可以使容器聯(lián)網(wǎng)。
自定義網(wǎng)絡是一種Docker內置的網(wǎng)絡驅動程序,可以創(chuàng)建一個本地或遠程的虛擬網(wǎng)絡,讓容器可以使用虛擬網(wǎng)絡中的IP地址進行通信。
以下是使用自定義網(wǎng)絡的方法。
創(chuàng)建自定義網(wǎng)絡
docker network create my_network
啟動容器,使用--network參數(shù)指定要使用的網(wǎng)絡。
docker run --name container1 --network=my_network -tid busybox docker run --name container2 --network=my_network -tid busybox
查看網(wǎng)絡連接情況
docker network inspect my_network
以上命令將顯示虛擬網(wǎng)絡的詳細信息,包括網(wǎng)絡的名稱、驅動程序、子網(wǎng)等。
總結
通過以上兩種方法可以解決Docker容器網(wǎng)絡訪問問題。
這些僅為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解析docker妙用SpringBoot構建微服務實戰(zhàn)記錄
Spring Boot 是 Spring 開源組織的子項目,是 Spring 組件一站式解決方案,本文通過詳細案例給大家解析docker妙用SpringBoot構建微服務實戰(zhàn)記錄,感興趣的朋友跟隨小編一起看看吧2021-11-11
一次wsl2+docker無法運行的經歷實戰(zhàn)記錄
這篇文章主要介紹了在使用WSL2和Docker?Desktop時遇到的錯誤,并提供了解決方案,錯誤可能是由于自定義WSL內核導致的,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-05-05
基于Docker實現(xiàn)Redis主從+哨兵搭建的示例實踐
本文主要介紹了基于Docker實現(xiàn)Redis主從+哨兵搭建的示例實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01

