
如题,宿主机为 ubuntu,运行着 socks5 代理,而且通过安装 proxychain 实现了在宿主机终端里的代理。但是如果直接用 proxychains docker run xxxxx 并不能使 docker 容器里实现代理。
我现在的需求就是:docker 容器通过宿主机的 socks5 代理实现全局代理,包括容器里的终端也要代理
1 nvkou 2020-02-17 04:28:11 +08:00 via Android 听起来像 docker 的网络模式选择问题。默认的桥接模式不好实现,试试直接使用宿主机网络模式 https://docs.docker.com/network/host/ |
2 twl007 2020-02-17 05:04:58 +08:00 via iPhone 换成 http 代理不行么 然后添加对应的环境变量就是了 一般代理软件都支持 http 盒 socket 吧 如果你实在想用 socket 可以尝试把目录挂在进去试试 |
3 CallMeReznov 2020-02-17 05:05:55 +08:00 难道不是直接填写宿主机的 socket 端口就行了? |
4 ysc3839 2020-02-17 06:15:12 +08:00 via Android 因为 docker 里面运行的程序是独立的进程吧? docker run 只是去启动而已,你要在 docker 里面使用 proxychains。 |
5 codehz 2020-02-17 08:39:54 +08:00 via Android Docker 的进程不是由 docker 命令创建的(而是一个 rpc 过去由 daemon 创建),所以对着 docker 命令用 proxychains 没有作用。。。。 当然也不是说对着 containerd 用 proxychains 就有作用了 所以最好的方法还是直接开个 http 代理然后设置环境变量 |
6 optional 2020-02-17 08:45:14 +08:00 设一个环境变量 all_proxy 可以解决一些问题 |
7 mabutou 2020-02-17 09:05:24 +08:00 官网文档:Configure Docker to use a proxy server https://docs.docker.com/network/proxy/ |
8 whatsmyip 2020-02-17 10:27:43 +08:00 socks 转全局不能简单实现,网络模式选 host 的话,直接跟本地使用一样,用 127.0.0.1 就可以,其他模式,我一般写 host 的局域网 ip 地址,缺点就是 ip 变了要改,不知道还有没有其他更合适的写法。 |
9 shellus 2020-02-17 10:48:51 +08:00 一个比较好的办法是使用一个 openwrt 容器来运行一个透明代理,然后要走代理的容器的网络接到这个 openwrt 的 lan 口 |
10 conn4575 2020-02-17 12:10:32 +08:00 via Android 同意楼上的,最好买个软路由,然后在上面折腾翻墙,本机即使你搞定了 docker 代理问题,你以后还会遇到 curl 如何翻墙、wget 如何翻墙 git 如何翻墙等一系列问题,直接在路由器上折腾虽然初期可能跟花时间,但是一劳永逸 |
11 rome7054 2020-02-17 12:18:52 +08:00 ubuntu 不知道,只知道 vrayx 是可以设置局域网能共享的,socks5 或者 http 都行。 那么假设你有个可访问的 socks5 代理了,下面是我常用的脚本: proxy ls reset_docker_proxy.sh set_docker_proxy.sh proxy cat set_docker_proxy.sh #!/bin/bash #please modify your proxy #proxys='EnvirOnment="HTTP_PROXY=socks5://10.254.0.16:1081" "HTTPS_PROXY=socks5://10.254.0.16:1081" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"' proxys='EnvirOnment="HTTP_PROXY=socks5://172.10.30.67:1081" "HTTPS_PROXY=socks5://172.10.30.67:1081" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"' #other_proxy_example='EnvirOnment="HTTP_PROXY=http://172.10.30.22:1081" "HTTPS_PROXY=http://172.10.30.22:1081" "NO_PROXY=localhost,127.0.0.1"' mkdir -p /etc/systemd/system/docker.service.d/ echo "add proxy to /etc/systemd/system/docker.service.d/docker-proxy.conf" echo "[Service]" >> /etc/systemd/system/docker.service.d/docker-proxy.conf echo $proxys >> /etc/systemd/system/docker.service.d/docker-proxy.conf echo "restarting docker" systemctl daemon-reload systemctl restart docker echo "your docker Environment: " systemctl show --property=Environment docker echo "set proxy successful, remember to recovery later" proxy cat reset_docker_proxy.sh #!/bin/bash echo "remove proxy config file" rm /etc/systemd/system/docker.service.d/docker-proxy.conf echo "restarting docker" systemctl daemon-reload systemctl restart docker echo "now your docker Environment is:" systemctl show --property=Environment docker echo "remove proxy successful" proxy |
12 locoz 2020-02-17 12:40:27 +08:00 直接 iptables 全局转发到 v2ray,然后 v2ray 再针对需要加速的进行转发就行了 |
13 Kobayashi 2020-02-17 16:39:25 +08:00 via Android 直接 Mellow,利用 TUN 拦截所有流量自动代理分流。 https://github.com/mellow-io/mellow 规则也是现成的 https://github.com/laggardkernel/proxifier-rules |