如题,宿主机为 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 1
官网文档: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 1
直接 Mellow,利用 TUN 拦截所有流量自动代理分流。
https://github.com/mellow-io/mellow 规则也是现成的 https://github.com/laggardkernel/proxifier-rules |