V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drperry
V2EX  ›  程序员

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

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

    如题,宿主机为 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   ·   实用小工具   ·   2704 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:18 · PVG 20:18 · LAX 04:18 · JFK 07:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.