前一阵子用公司的服务器玩docker的时候,发现拉取不了远程镜像。咨询了一下网络管理员,说是非常时期,外网权限全部关闭。
这严重阻碍了我的求知欲望。于是想到了使用代理。
这里简单解释一下,很多大型公司为了确保网络安全,都会建立一个内网环境。
如果员工想访问互联网上的资源,就需要在浏览器上配置公司的代理、输入用户名密码才能访问。
公司的代理就可以理解为一个中转服务器,所有对互联网的请求都会由这个服务器进行转发。
Docker代理配置
了解了原理,针对上面的问题,就需要考虑如何配置docker的代理。
在CentOS下,创建目录 /etc/systemd/system/docker.service.d:
$mkdir -p /etc/systemd/system/docker.service.d
然后cd到这个目录下,vi新建文件http-proxy.conf:
$cd /etc/systemd/system/docker.service.d
$vi http-proxy.conf
格式可以参考下方:
[Service]
Environment="HTTP_PROXY=http://用户名:密码@代理服务器地址:端口”
Environment="HTTPS_PROXY=http://用户名:密码@代理服务器地址:端口”
在这里,可以配置http和https的代理。需要结合公司代理的实际情况进行配置。我们公司就是http代理,因此只保留“HTTP_PROXY”这一行即可。
然后重启容器:
#重载配置
$systemctl daemon-reload# 重启容器
$systemctl restart docker
执行 docker info看一下docker的信息:
这里确认代理已经配置好了。
接下来再执行 docker pull ,就可以成功拉取外网镜像了。
Yum代理配置
通过上面docker的例子,我们可以举一反三,得出结论:
所有的包管理工具都可以通过配置代理来拉取远程仓库的包。
比如 yum,需要在/etc/yum.conf中,配置代理,格式如下:
proxy=http://代理服务器ip:端口
proxy_username=用户名
proxy_password=密码
如果yum还不行,就再在/etc/profile中配置代理:
export http_proxy=http://用户名:密码@代理服务器地址:端口
export https_proxy=http://用户名:密码@代理服务器地址:端口# 配置生效
$ source /etc/profie
yarn和npm代理
在终端上执行命令:
$ yarn config set proxy http://用户名:密码@代理ip:端口
$ yarn config set https-proxy https://用户名:密码@代理ip:端口
例如:
$ yarn config set proxy http://myname:Abc123\!\!@proxy.company.com:8080
$ yarn config set https-proxy http://myname:Abc123\!\!\!\!@proxy.company.com:8080
配置好后,再执行 yarn install即可。
如果报类似 “不能识别服务器证书 ”的ssl错误,还需要执行如下命令:
$ yarn config set "strict-ssl" false -g
npm代理的设置类似:
$ npm config set proxy http://server:port
$ npm config set https-proxy http://server:port
需要注意:
在Linux下,有的时候代理认证会失败,可能是因为密码中包含了特殊字符。
这时候需要用反斜杠“\”转义,或者直接使用ASIIC码,即% + Hex 形式。比如,“!”,对应的ASIIC码是“0x21”。
IDE的代理
一些常用的集成开发工具,像eclipse等,有时候更新依赖包总会失败,也可以在eclipse通过配置代理实现拉取远程仓库的包,这里不赘述。
最后
在公司内网环境中如果提供了代理服务器,那么所有的包管理工具都可以通过配置代理来拉取远程仓库的包。
如果你在工作过程中也遇到过这样的问题,不妨尝试一下本文中提到的方法。