V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
drperry
V2EX  ›  程序员

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

  •  1
     
  •   drperry · Feb 17, 2020 · 4998 views
    This topic created in 2267 days ago, the information mentioned may be changed or developed.

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

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

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

    如果你实在想用 socket 可以尝试把目录挂在进去试试
    CallMeReznov
        3
    CallMeReznov  
       Feb 17, 2020
    难道不是直接填写宿主机的 socket 端口就行了?
    ysc3839
        4
    ysc3839  
       Feb 17, 2020 via Android
    因为 docker 里面运行的程序是独立的进程吧? docker run 只是去启动而已,你要在 docker 里面使用 proxychains。
    codehz
        5
    codehz  
       Feb 17, 2020 via Android
    Docker 的进程不是由 docker 命令创建的(而是一个 rpc 过去由 daemon 创建),所以对着 docker 命令用 proxychains 没有作用。。。。
    当然也不是说对着 containerd 用 proxychains 就有作用了
    所以最好的方法还是直接开个 http 代理然后设置环境变量
    optional
        6
    optional  
       Feb 17, 2020
    设一个环境变量 all_proxy 可以解决一些问题
    mabutou
        7
    mabutou  
       Feb 17, 2020   ❤️ 1
    官网文档:Configure Docker to use a proxy server
    https://docs.docker.com/network/proxy/
    whatsmyip
        8
    whatsmyip  
       Feb 17, 2020
    socks 转全局不能简单实现,网络模式选 host 的话,直接跟本地使用一样,用 127.0.0.1 就可以,其他模式,我一般写 host 的局域网 ip 地址,缺点就是 ip 变了要改,不知道还有没有其他更合适的写法。
    shellus
        9
    shellus  
       Feb 17, 2020
    一个比较好的办法是使用一个 openwrt 容器来运行一个透明代理,然后要走代理的容器的网络接到这个 openwrt 的 lan 口
    conn4575
        10
    conn4575  
       Feb 17, 2020 via Android
    同意楼上的,最好买个软路由,然后在上面折腾翻墙,本机即使你搞定了 docker 代理问题,你以后还会遇到 curl 如何翻墙、wget 如何翻墙 git 如何翻墙等一系列问题,直接在路由器上折腾虽然初期可能跟花时间,但是一劳永逸
    rome7054
        11
    rome7054  
       Feb 17, 2020
    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  
       Feb 17, 2020
    直接 iptables 全局转发到 v2ray,然后 v2ray 再针对需要加速的进行转发就行了
    Kobayashi
        13
    Kobayashi  
       Feb 17, 2020 via Android   ❤️ 1
    直接 Mellow,利用 TUN 拦截所有流量自动代理分流。
    https://github.com/mellow-io/mellow

    规则也是现成的
    https://github.com/laggardkernel/proxifier-rules
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   808 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 19:32 · PVG 03:32 · LAX 12:32 · JFK 15:32
    ♥ Do have faith in what you're doing.