Docker 網(wǎng)絡(luò)代理配置及防火墻設(shè)置的方法步驟
背景
在某些環(huán)境中,服務(wù)器無法直接訪問外網(wǎng),需要通過網(wǎng)絡(luò)代理進(jìn)行連接。雖然我們通常會(huì)在 /etc/environment
或 /etc/profile
等系統(tǒng)配置文件中直接配置代理,但 Docker 命令無法使用這些配置。例如,在使用 docker pull
命令從外網(wǎng)拉取鏡像時(shí),可能會(huì)遇到如下錯(cuò)誤:
docker pull hello-world Unable to find image 'hello-world:latest' locally Pulling repository docker.io/library/hello-world docker: Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/hello-world/images. You may want to check your internet connection or if you are behind a proxy.. See 'docker run --help'.
解決方案
防火墻設(shè)置
在進(jìn)行 Docker 代理配置之前,建議先檢查防火墻設(shè)置,確保相關(guān)端口已開放。以下是在 CentOS 7 上查看、防火墻狀態(tài)以及啟用/停用防火墻的方法:
查看防火墻狀態(tài):
systemctl status firewalld
示例輸出:
關(guān)閉防火墻:
systemctl stop firewalld
開啟防火墻:
systemctl start firewalld
禁用防火墻(防止開機(jī)自動(dòng)啟動(dòng)):
systemctl disable firewalld
啟用防火墻(設(shè)置為開機(jī)自動(dòng)啟動(dòng)):
systemctl enable firewalld
檢查已開放的端口:
firewall-cmd --list-ports
在進(jìn)行 Docker 代理配置時(shí),如果防火墻開啟,確保相關(guān)代理端口(如 2375, 1230)已通過防火墻放行。
方案一:通過手動(dòng)啟動(dòng) Docker Daemon 設(shè)置代理
停止 Docker 服務(wù):
systemctl stop docker.service
手動(dòng)啟動(dòng) Docker Daemon,監(jiān)聽所有網(wǎng)絡(luò)接口:
nohup docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &
更多詳情可參考 Docker Daemon Socket 選項(xiàng)。
方案二:配置系統(tǒng)級(jí)代理(不推薦)
可以通過修改系統(tǒng)配置文件來設(shè)置代理,如 Ubuntu 的 /etc/default/docker
或 CentOS 的 /etc/sysconfig/docker
文件,但這種方法已不再推薦使用。具體配置如下:
HTTP_PROXY="http://[proxy-addr]:[proxy-port]/" HTTPS_PROXY="https://[proxy-addr]:[proxy-port]/" export HTTP_PROXY HTTPS_PROXY
方案三:持久化的 Docker 代理配置
這種方法將代理配置持久化,使其在 Docker 服務(wù)每次啟動(dòng)時(shí)生效。
創(chuàng)建 Docker 服務(wù)的 systemd 配置目錄:
mkdir -p /etc/systemd/system/docker.service.d
創(chuàng)建代理配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf
并添加以下內(nèi)容:
[Service] Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/"
如果有不需要使用代理訪問的內(nèi)部 Docker 鏡像倉庫,可以配置 NO_PROXY
變量:
[Service] Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
重新加載配置:
systemctl daemon-reload
重啟 Docker 服務(wù):
systemctl restart docker
更多細(xì)節(jié)請(qǐng)參考 Docker systemd 配置指南。
使用 SOCKS5 代理
要為 Docker 配置 SOCKS5 代理,可以按以下步驟操作:
編輯 Docker 服務(wù)文件 /usr/lib/systemd/system/docker.service
:
[Service] Environment="HTTP_PROXY=socks5://127.0.0.1:1230/" Environment="HTTPS_PROXY=socks5://127.0.0.1:1230/" Environment="NO_PROXY=localhost,127.0.0.1,m1empwb1.mirror.aliyuncs.com,docker.io,registry.cn-hangzhou.aliyuncs.com"
重新加載服務(wù)配置并重啟 Docker:
systemctl daemon-reload systemctl restart docker
驗(yàn)證代理配置:
systemctl show --property=Environment docker
如果輸出的內(nèi)容中包含 127.0.0.1:1230
這樣的地址,表示配置成功。
測(cè)試
可以通過 docker pull
命令測(cè)試代理配置是否生效:
docker pull gcr.io/kubernetes-helm/tiller:v2.2.2
使用 ss -antp |grep EST |egrep '1080|1230'
命令查看連接狀態(tài),確保代理配置已生效。
到此這篇關(guān)于Docker 網(wǎng)絡(luò)代理配置及防火墻設(shè)置的方法步驟的文章就介紹到這了,更多相關(guān)Docker 網(wǎng)絡(luò)代理配置及防火墻設(shè)置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker進(jìn)階教程之dockerfile優(yōu)化鏡像大小
同樣功能的鏡像,但是不同的Dockerfile build出來的鏡像大小是不一樣的,下面這篇文章主要給大家介紹了關(guān)于docker進(jìn)階教程之dockerfile優(yōu)化鏡像大小的相關(guān)資料,需要的朋友可以參考下2022-10-10Docker容器輸入漢字觸發(fā)自動(dòng)補(bǔ)全問題
Linux系統(tǒng)中,當(dāng)終端出現(xiàn)中文亂碼通常是由于缺少中文字符集和字體,安裝中文字體和設(shè)置合適的字符集zh_CN.utf8,可以有效解決這一問題,首先,通過查看系統(tǒng)支持的字符集了解是否支持中文,然后安裝相應(yīng)字符集,其次,查看并設(shè)置當(dāng)前系統(tǒng)字符集2024-10-10Docker部署搭建WebDav服務(wù)的詳細(xì)過程
這篇文章主要介紹了Docker部署WebDav服務(wù),小編綜合了各種共享方式后最終選擇了使用 WebDav 來共享文件,下面小編把搭建部署過程分享給大家,需要的朋友可以參考下2022-08-08docker批量啟動(dòng)關(guān)閉所有容器的操作
這篇文章主要介紹了docker批量啟動(dòng)關(guān)閉所有容器的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03docker安裝Jenkins配置Gitee SSH密鑰踩坑解決
這篇文章主要為大家介紹了docker安裝Jenkins配置Gitee SSH密鑰踩坑解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08