[求助] docker 容器如何使用本机容器外的 http_proxy - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
leverestfish
V2EX    程序员

[求助] docker 容器如何使用本机容器外的 http_proxy

  •  
  •   leverestfish 2023 年 8 月 31 日 3080 次点击
    这是一个创建于 872 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网络小白来求助一下:代理是在本机的 7890 端口,请问如何在同一个机器的 docker 容器内通过代理来访问网络?

    直接 export http\_proxy=127.0.0.1:7890; ... 显然是不行的

    按照官网文档尝试了使用/etc/systemd/system/docker.service.d/http-proxy.conf 好像并不管用

    也按照这个stack overflow的方法试了一下,可以 ping 通 172.17.0.2 ( ifconfig 显示的 ip ),但是并不能使用 7890 端口

    备注:系统是 ubuntu (代理用的是 cfw ),docker 是 centos 镜像

    感谢!

    第 1 条附言    2023 年 8 月 31 日

    成功解决了,感谢各位大佬!总结一下:

    方案1:CFW直接开启tunnel模式

    方案2:container里面export <宿主机局域网ip>:7890即可,需要打开cfw的allow LAN功能

    18 条回复    2023-08-31 20:26:56 +08:00
    yangyaofei
        1
    yangyaofei  
       2023 年 8 月 31 日   1
    这个里面有 https://docs.docker.com/network/proxy/

    其实最简单的方法是直接 cfw 开启 tun 模式,就好了
    ShineyWang
        2
    ShineyWang  
       2023 年 8 月 31 日   1
    httpproxy=127.0.0.1:7890
    这里的 127.0.0.1 改成本机的局域网 IP(这个 IP 才能让 docker 内的容器直接访问)
    设置后可以通过 CURL google 测试连接
    Achilless
        3
    Achilless  
       2023 年 8 月 31 日   1
    简单点,clash 开 tunnel 模式就完了
    leverestfish
        4
    leverestfish  
    OP
       2023 年 8 月 31 日
    @ShineyWang #2 我用 ip addr show docker0 命令看到宿主机的局域网 ip 是 172.17.0.1 ,但是我在 docker 里面加载代理之后 curl 会得到 Failed to connect to 172.17.0.1 port 7890: Connection refused ,确认过本机 127.0.0.1:7890 直接 curl google 是没有问题的,好奇怪,难道是启动 docker 容器的时候要加什么参数吗…… 参考了这个教程 https://jingsam.github.io/2018/10/16/host-in-docker.html
    leverestfish
        5
    leverestfish  
    OP/div>
       2023 年 8 月 31 日
    @yangyaofei #1 tun 模式开启之后还需要其他相应操作吗
    token10086
        6
    token10086  
       2023 年 8 月 31 日   1
    mac export https_proxy=http://host.docker.internal:1081;export http_proxy=http://host.docker.internal:1081;export all_proxy=socks5://host.docker.internal:1081

    linux 替换成 172.17.0.1
    cc666
        7
    cc666  
       2023 年 8 月 31 日   2
    关键字:host.docker.internal ,docker 内部访问这个网址即访问 docker 宿主机地址
    leverestfish
        8
    leverestfish  
    OP
       2023 年 8 月 31 日
    @Achilless #3 @yangyaofei #1 确实可以了! nb !
    leverestfish
        9
    leverestfish  
    OP
       2023 年 8 月 31 日
    @token10086 #6 四楼试过了,不行
    ShineyWang
        10
    ShineyWang  
       2023 年 8 月 31 日
    @leverestfish #4 在我的环境中
    本机(开启 Clash 的 windows),docker(linux)以及 docker 启动的 container 是三个系统;分别有三个 IP
    docker 主机一般不需要代理,假如部分 image 拉取过慢可以开代理

    一般是 container 需要代理,这个代理可以通过 docker start 的时候注入环境变量来开启
    启动参数一般加-e HTTPS_PROXY="http://dockernew.local:7890" -e HTTP_PROXY="http://dockernew.local:7890"就可以

    加了参数后可以到 container 里面 curl 判断实际情况

    假如不通,需要测试 clash 的配置有没有问题,clash 有没有开启 allow lan ;IP 对不对
    yangyaofei
        11
    yangyaofei  
       2023 年 8 月 31 日
    @leverestfish #5 开了 TUN 了之后就都能用了, docker 的文档里面的那个只能是 container 里面用代理, 但是 pull 镜像的时候没用, 所以还是 TUN 最无脑. 还有如果不用 tun 用 export 代理从 localhost 替换成 host.docker.internal 就好了, 有对应的文档.
    leverestfish
        12
    leverestfish  
    OP
       2023 年 8 月 31 日
    @ShineyWang #10 破案了!就是因为忘记开 allow LAN 了,感谢!!
    julyclyde
        13
    julyclyde  
       2023 年 8 月 31 日
    从/etc/systemd/system/docker.service.d/ 可以看出,你不太分得清容器内和容器服务这俩东西
    hzfyjgw
        14
    hzfyjgw  
       2023 年 8 月 31 日
    root@xxxx:~# cat /etc/systemd/system/containerd.service.d/http-proxy.conf
    [Service]
    EnvirOnment="HTTP_PROXY=http://192.168.x.xx:7890" "HTTPS_PROXY=http://192.168.x.xx:7890"
    julyclyde
        15
    julyclyde  
       2023 年 8 月 31 日
    @hzfyjgw 应该是小写吧?
    以及,这里的环境变量是给 containerd 用的( pull image )而不是给容器内运行环境用的吧
    juicer
        16
    juicer  
       2023 年 8 月 31 日 via iPad
    我用的是 1 楼链接里的方法,对于没有安装 clash 的主机很有用。
    cxtrinityy
        17
    cxtrinityy  
       2023 年 8 月 31 日 via Android
    最简单的就是代理 listen 在本机 docker ip 的端口即可让 docker 内的应用使用
    stcode
        18
    stcode  
       2023 年 8 月 31 日
    我在 debian11 用 exprot 添加代理,代理是局域网机器,docker 可以访问.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4055 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 10:19 PVG 18:19 LAX 02:19 JFK 05:19
    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