如何让 docker 容器使用宿主机的 socks5 代理? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
drperry
V2EX    程序员

如何让 docker 容器使用宿主机的 socks5 代理?

  •  1
     
  •   drperry 2020-02-17 03:51:24 +08:00 4571 次点击
    这是一个创建于 2118 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,宿主机为 ubuntu,运行着 socks5 代理,而且通过安装 proxychain 实现了在宿主机终端里的代理。但是如果直接用 proxychains docker run xxxxx 并不能使 docker 容器里实现代理。

    我现在的需求就是:docker 容器通过宿主机的 socks5 代理实现全局代理,包括容器里的终端也要代理

    13 条回复    2020-02-17 16:39:25 +08:00
    nvkou
        1
    nvkou  
       2020-02-17 04:28:11 +08:00 via Android
    听起来像 docker 的网络模式选择问题。默认的桥接模式不好实现,试试直接使用宿主机网络模式
    https://docs.docker.com/network/host/
    twl007
        2
    twl007  
       2020-02-17 05:04:58 +08:00 via iPhone
    换成 http 代理不行么 然后添加对应的环境变量就是了 一般代理软件都支持 http 盒 socket 吧

    如果你实在想用 socket 可以尝试把目录挂在进去试试
    CallMeReznov
        3
    CallMeReznov  
       2020-02-17 05:05:55 +08:00
    难道不是直接填写宿主机的 socket 端口就行了?
    ysc3839
        4
    ysc3839  
       2020-02-17 06:15:12 +08:00 via Android
    因为 docker 里面运行的程序是独立的进程吧? docker run 只是去启动而已,你要在 docker 里面使用 proxychains。
    codehz
        5
    codehz  
       2020-02-17 08:39:54 +08:00 via Android
    Docker 的进程不是由 docker 命令创建的(而是一个 rpc 过去由 daemon 创建),所以对着 docker 命令用 proxychains 没有作用。。。。
    当然也不是说对着 containerd 用 proxychains 就有作用了
    所以最好的方法还是直接开个 http 代理然后设置环境变量
    optional
        6
    optional  
       2020-02-17 08:45:14 +08:00
    设一个环境变量 all_proxy 可以解决一些问题
    mabutou
        7
    mabutou  
       2020-02-17 09:05:24 +08:00   1
    官网文档:Configure Docker to use a proxy server
    https://docs.docker.com/network/proxy/
    whatsmyip
        8
    whatsmyip  
       2020-02-17 10:27:43 +08:00
    socks 转全局不能简单实现,网络模式选 host 的话,直接跟本地使用一样,用 127.0.0.1 就可以,其他模式,我一般写 host 的局域网 ip 地址,缺点就是 ip 变了要改,不知道还有没有其他更合适的写法。
    shellus
        9
    shellus  
       2020-02-17 10:48:51 +08:00
    一个比较好的办法是使用一个 openwrt 容器来运行一个透明代理,然后要走代理的容器的网络接到这个 openwrt 的 lan 口
    conn4575
        10
    conn4575  
       2020-02-17 12:10:32 +08:00 via Android
    同意楼上的,最好买个软路由,然后在上面折腾翻墙,本机即使你搞定了 docker 代理问题,你以后还会遇到 curl 如何翻墙、wget 如何翻墙 git 如何翻墙等一系列问题,直接在路由器上折腾虽然初期可能跟花时间,但是一劳永逸
    rome7054
        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
    locoz
        12
    locoz  
       2020-02-17 12:40:27 +08:00
    直接 iptables 全局转发到 v2ray,然后 v2ray 再针对需要加速的进行转发就行了
    Kobayashi
        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
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2632 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 12:47 PVG 20:47 LAX 04:47 JFK 07:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86