当前位置: 代码网 > 服务器>服务器>云虚拟主机 > Docker 网络代理配置及防火墙设置的方法步骤

Docker 网络代理配置及防火墙设置的方法步骤

2024年11月03日 云虚拟主机 我要评论
背景在某些环境中,服务器无法直接访问外网,需要通过网络代理进行连接。虽然我们通常会在/etc/environment或/etc/profile等系统配置文件中直接配置代理,但 docker 命令无法使

背景

在某些环境中,服务器无法直接访问外网,需要通过网络代理进行连接。虽然我们通常会在 /etc/environment 或 /etc/profile 等系统配置文件中直接配置代理,但 docker 命令无法使用这些配置。例如,在使用 docker pull 命令从外网拉取镜像时,可能会遇到如下错误:

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'.

解决方案

防火墙设置

在进行 docker 代理配置之前,建议先检查防火墙设置,确保相关端口已开放。以下是在 centos 7 上查看、防火墙状态以及启用/停用防火墙的方法:

查看防火墙状态

systemctl status firewalld

示例输出:

在这里插入图片描述

关闭防火墙

systemctl stop firewalld

在这里插入图片描述

开启防火墙

systemctl start firewalld

在这里插入图片描述

禁用防火墙(防止开机自动启动):

systemctl disable firewalld

在这里插入图片描述

启用防火墙(设置为开机自动启动):

systemctl enable firewalld

在这里插入图片描述

检查已开放的端口

firewall-cmd --list-ports

在进行 docker 代理配置时,如果防火墙开启,确保相关代理端口(如 2375, 1230)已通过防火墙放行。

方案一:通过手动启动 docker daemon 设置代理

停止 docker 服务:

systemctl stop docker.service

手动启动 docker daemon,监听所有网络接口:

nohup docker daemon -h tcp://0.0.0.0:2375 -h unix:///var/run/docker.sock &

更多详情可参考 docker daemon socket 选项

方案二:配置系统级代理(不推荐)

可以通过修改系统配置文件来设置代理,如 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 服务每次启动时生效。

创建 docker 服务的 systemd 配置目录:

mkdir -p /etc/systemd/system/docker.service.d

创建代理配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf 并添加以下内容:

[service]
environment="http_proxy=http://[proxy-addr]:[proxy-port]/" "https_proxy=https://[proxy-addr]:[proxy-port]/"

如果有不需要使用代理访问的内部 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 服务:

systemctl restart docker

更多细节请参考 docker systemd 配置指南

使用 socks5 代理

要为 docker 配置 socks5 代理,可以按以下步骤操作:

编辑 docker 服务文件 /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"

重新加载服务配置并重启 docker:

systemctl daemon-reload
systemctl restart docker

验证代理配置:

systemctl show --property=environment docker

如果输出的内容中包含 127.0.0.1:1230 这样的地址,表示配置成功。

测试

可以通过 docker pull 命令测试代理配置是否生效:

docker pull gcr.io/kubernetes-helm/tiller:v2.2.2

使用 ss -antp |grep est |egrep '1080|1230' 命令查看连接状态,确保代理配置已生效。

到此这篇关于docker 网络代理配置及防火墙设置的方法步骤的文章就介绍到这了,更多相关docker 网络代理配置及防火墙设置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com