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

怎样才能让我的 docker 走代理

  •  
  •   tengxunkuku · 281 天前 · 8387 次点击
    这是一个创建于 281 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天在拉取 ghcr 镜像的时候发现速度特别慢,观察 clashlog 发现 docker 拉取一直没有走代理,搜索相关教程发现群晖的系统是深度魔改的,与通用教程不同。
    系统:黑裙 DSM7.0
    代理方式:docker 运行 clash
    需求:docker 本身走代理
    30 条回复    2023-02-01 19:09:34 +08:00
    isbase
        1
    isbase  
       281 天前
    局域网内网关直接翻墙,或者加个旁路由,将群晖的网关改成旁路由
    isbase
        2
    isbase  
       281 天前
    一些关键字:R2S 软路由、OpenWRT 、Surge 网关模式
    hsfzxjy
        3
    hsfzxjy  
       281 天前
    改 docker daemon 的启动参数
    kaedeair
        4
    kaedeair  
       281 天前   ❤️ 1
    你的问题是拉取镜像慢还是让 docker 走代理?
    如果是让 docker 走代理可以:
    1.通过 iptables 设置转发规则,从 docker 出来的流量转发到 clash 上
    2.启动 docker 时加载环境变量 关键字:群晖 docker daemon http proxy 配置
    3.比较暴力的方法就是楼上提到的,交给路由器处理
    如果是拉取镜像慢可以:
    1.更改 docker hub 使其指向访问快镜像源
    2.在另一台电脑下好镜像,再到群辉上导入
    ltkun
        5
    ltkun  
       281 天前 via Android
    直接配置国内 docker 源
    DefoliationM
        6
    DefoliationM  
       281 天前
    换用 podman,

    ```bash
    http_proxy=http://xxxx:8080 https_proxy=http://xxxx:8080 podman pull docker.io/xxx:latest
    ```
    2022study
        7
    2022study  
       281 天前
    建议命令行操作 ,直接用 export all_proxy=socks5:地址:port 设置命令行代理,然后 docker pull 镜像,取消用 unset all_proxy
    zliea
        8
    zliea  
       281 天前
    cloudsigma2022
        9
    cloudsigma2022  
       281 天前
    别的不清楚,如果你用的是 tcp 透明代理。加一条 output

    ```
    # us for output
    iptables -t nat -I GFW -d yourvpsip -j RETURN
    iptables -t nat -I OUTPUT -p tcp -m multiport --dports 80,443 -j GFW

    ```
    cloudsigma2022
        10
    cloudsigma2022  
       281 天前
    你的宿主 output 走 gfw ,那么 docker 就会默认也走 gfw
    littlewing
        11
    littlewing  
       281 天前
    代理方式:docker 运行 clash

    说明你是用的旁路透明网关的方式,那不应该不走代理啊
    chenjiangui998
        12
    chenjiangui998  
       281 天前
    clash tun 模式就行
    K1ri7o
        13
    K1ri7o  
       281 天前 via Android
    dxppp
        14
    dxppp  
       281 天前
    IU 引起了我的注意
    lamesbond
        15
    lamesbond  
       281 天前
    如果是拉取镜像走代理的话,https://blog.csdn.net/styshoo/article/details/55657714
    地址配成代理的地址,我是用 windows 上装的 netch 挂梯子
    yanzhiling2001
        16
    yanzhiling2001  
       281 天前
    编译一份 ProxyChains ,编辑一下默认配置文件

    prxychains docker xxx
    BugCry
        17
    BugCry  
       281 天前   ❤️ 3
    拖个镜像没那么复杂
    docker pull ghcr.io/github/super-linter:latest
    替换为
    docker pull ghcr.nju.edu.cn/github/super-linter:latest
    yanzhiling2001
        18
    yanzhiling2001  
       281 天前
    刚留意是 docker 运行的代理,代理 是不是映射到外面的端口上了,

    这样套娃我还没试过,楼主试试给个反馈
    fitme
        20
    fitme  
       281 天前
    方式有点多
    tengxunkuku
        21
    tengxunkuku  
    OP
       281 天前
    总结:
    原代理方式,docker 运行 clash ,暴露端口,群晖设置系统代理 127.0.0.1:7890 ,终端可以直接代理,但不知道为什么 docker 没走代理。
    折腾了一下午,尝试了以下几种方式,由于种种原因失败
    1.群晖安装 openwrt ,更改网关后无法 ping 通百度
    2.docker daemon 配置文件,DSM 与通用 linux 不同,不知道在哪
    3.iptables+redsocks 流量转发,需要安装编译环境和相关工具,我不想把群晖里装太多东西
    4.群晖开的 windows 虚拟机,CFW 无法作为网关。
    5.群晖创建 tun ,映射到 docker clash 作为透明代理,按教程走了一遍,失败
    临时解决办法,更改 ClashX Pro 作为网关。许多在 linux 里很简单的方法到了 DSM 就会很复杂,先这样,以后有时间了再研究,感谢大家的回复。
    TMaize
        22
    TMaize  
       281 天前
    可以试下这个 https://dockerproxy.com/docs 。我有时候 pull 不来下会用这个替换下源地址,然后再改下 tag
    shelken
        23
    shelken  
       281 天前 via iPhone
    群晖的网络设置可以设置代理的,这里的代理设置可以对群晖的 docker 管理端生效(就是 web 页面 docker )。如果你是 ssh 连接直接命令的话,直接 export http proxy 或者 socks5 。
    xwchenhui
        24
    xwchenhui  
       281 天前
    分享一个比较完美的方案,不过比较复杂:

    1 、要有个能 passwall 的旁路
    2 、群晖开双网口,一个接主路由(默认网关),一个接旁路由
    3 、docker 创建 macvlan 网络,一个网关用主路由的,一个网关用旁路的
    4 、需要 passwall 的容器指定旁路的 macvlan 网络

    这样基本上就比较灵活了,哪些要直接出去的(比如下载工具),哪些要走旁路的可以自己搭配
    YamatoRyou
        25
    YamatoRyou  
       281 天前
    分享一个我目前正在用的群晖 Docker 容器使用代理的方案:
    1. 要走代理的容器添加环境变量:
    HTTP_PROXY=http://127.0.0.1:****
    HTTPS_PROXY=http://127.0.0.1:****

    2. 另起一个 Privoxy 容器 (网络模式设置为 hosts), 配置文件注明要开放的端口及要经过代理访问的域名. 接着让上一个容器连接到 Privoxy 指定的端口.

    这个方案我用来让 Synapse 容器连接推送网关, 存在一个缺点: http:// 开头的地址始终不能经过代理, https:// 开头的正常. 原因不明.
    YamatoRyou
        26
    YamatoRyou  
       281 天前
    @YamatoRyou 看走眼了, 以为是楼主要让容器走代理. 请无视.
    mu2er
        27
    mu2er  
       280 天前 via iPhone
    我是群晖虚拟机上安装 openwrt ,运行 clash ,作为旁路由使用,需要科学上网的 Apple TV 等设备按需设置网关跟 dns 地址到旁路由。
    试过群晖控制面板里设置 http 代理,好像这么直接设置 docker 容器并不能走代理连接。
    可以在群晖的网络设置里修改网关地址跟 dns 为旁路由,这么整整个群晖都可以科学上网了。
    tengxunkuku
        28
    tengxunkuku  
    OP
       280 天前
    简单方法:为 systemd 设置环境变量,DSM 中 dockerd 的父进程为 /sbin/init ,而 init 为 systemd 的一个符号链接,因此为 systemd 设置环境变量依然对 docker 起作用。参考 https://cloud.tencent.com/developer/article/1627708
    horizon
        29
    horizon  
       119 天前
    我也遇到了这个问题。。蛋疼。
    horizon
        30
    horizon  
       119 天前
    @tengxunkuku 老哥,我发现没有 docker.service 这个,你怎么解决的
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5047 人在线   最高记录 5634   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 02:40 · PVG 10:40 · LAX 19:40 · JFK 22:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.