加载中……

colima 代理配置

问题:

Dockerfile 里面有下载墙外资源操作,在本地配置了代理和设置了代理的环境变量但 docker build 过程始终下载不了墙外资源。docker daemon 用 colima 起的。

思路梳理:

有下载墙外资源操作都是通过代理去下载,本地开了代理后会在本地起一个代理程序,访问时就通过访问代理程序的ip 端口去访问。对于 docker 而言,访问代理程序操作是docker daemon做的,不是在 build 时做的,还需要在 docker 中配置代理 IP 才可以,在 docker 中配置代理的方式有以下两种:

  1. dockerd走代理: 在 config.json 文件中配置 httpProxy
  2. 容器内走代理:
    1. 设置主机与容器共享网络:docker build 时传入 --net=host 参数,指定当前 docker 操作与主机共享网络,在请求数据时也会读取到宿主机上的环境变量,然后走宿主机代理。
    2. 容器内走主机 IP 的代理:将 http_proxy, https_proxy 环境变量直接配成宿主机的 IP。

另外一个关键点:httpProxy 中的 IP 应该配置成啥?

在本地看起来时 127.0.0.1 但在 docker 中可能会有些差异,我的 docker 是用 colima 起的,而 colima 环回地址是192.168.5.2 ,可以通过以 net=host 网络模式启动然后查看路由规则获取到,如下查看到的就是 192.168.5.2 的地址。

# 查看容器内 ip 路由,如下是在容器内通过 192.168.5.2 这个 ip 来连接到主机网卡(eth0)
# ip r 等于 ip route show,查看所有路由配置
$ docker run --netw=host alpine ip r
default via 192.168.5.2 dev eth0  metric 202 
172.17.0.0/16 dev docker0 scope link  src 172.17.0.1 
192.168.5.0/24 dev eth0 scope link  src 192.168.5.15

解决方式

方式1: dockerd走代理: 在 config.json 文件中配置 httpProxy

$ vi /.docker/config.json
# 在里面加入如下代理配置,,不用重启
{
        "proxies": {
                "default": {
                        "httpProxy": "http://192.168.5.2:7890",
                        "httpsProxy": "http://192.168.5.2:7890"
                }
        }
}

所有 docker 里的请求都经过代理程序,所以不需要在环境变量里配置啥代理。

验证:

起一个 alipne 镜像并在里面安装 curl 后,curl https://github.com

# 宿主机上 run alipne 镜像
$ docker run -it alpine
# 在容器内下载 curl 命令
$ apk add curl
# 然后 curl -v 可以看到详情
$ curl -v https://github.com

方式2:设置主机与容器共享网络

验证:
起一个 alipne 镜像以 host 方式运行,并在里面安装 curl 后,curl https://github.com

# 宿主机上 run alipne 镜像
$ docker run --network host -it alpine
# 在容器内下载 curl 命令
$ apk add curl
# 然后 curl 可以看到详情
$ curl -v https://github.com

如果是用 colima 起的 docker 可能访问不到,因为回环地址不一样,所以这个时候还是需要通过代理到回环地址才可以

配置容器内 http_proxy 环境变量:

export https_proxy=http://192.168.5.2:7890 http_proxy=http://192.168.5.2:7890
# 然后再 curl 就可以看到能访问成功了

方式3: 容器内走主机 IP 的代理

先获取访问主机的 IP,然后在容器内部配置 http_proxy 环境变量。
验证:

# 宿主机上 run alipne 镜像
$ docker run -it alpine
# 配置代理环境变量
$ export https_proxy=http://192.168.5.2:7890 http_proxy=http://192.168.5.2:7890
# 在容器内下载 curl 命令
$ apk add curl
# 然后 curl 可以看到详情
$ curl -v https://github.com

参考:

https://github.com/lima-vm/lima/blob/master/docs/network.md#host-ip-19216852

posted @ 2022-09-12 18:20  一泓清泉,一叶扁舟  阅读(1431)  评论(0)    收藏  举报