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

怎样才能让我的 docker 走代理

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

    ```bash
    http_proxy=http://xxxx:8080 https_proxy=http://xxxx:8080 podman pull docker.io/xxx:latest
    ```
    2022study
        7
    2022study  
       2022-08-23 14:31:20 +08:00
    建议命令行操作 ,直接用 export all_proxy=socks5:地址:port 设置命令行代理,然后 docker pull 镜像,取消用 unset all_proxy
    zliea
        8
    zliea  
       2022-08-23 15:05:45 +08:00
    cloudsigma2022
        9
    cloudsigma2022  
       2022-08-23 15:11:56 +08:00
    别的不清楚,如果你用的是 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  
       2022-08-23 15:12:45 +08:00
    你的宿主 output 走 gfw ,那么 docker 就会默认也走 gfw
    littlewing
        11
    littlewing  
       2022-08-23 15:14:33 +08:00
    代理方式:docker 运行 clash

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

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

    这样套娃我还没试过,楼主试试给个反馈
    fitme
        20
    fitme  
       2022-08-23 18:18:51 +08:00
    方式有点多
    tengxunkuku
        21
    tengxunkuku  
    OP
       2022-08-23 19:11:46 +08:00
    总结:
    原代理方式,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  
       2022-08-23 20:17:09 +08:00
    可以试下这个 https://dockerproxy.com/docs 。我有时候 pull 不来下会用这个替换下源地址,然后再改下 tag
    shelken
        23
    shelken  
       2022-08-23 22:57:50 +08:00 via iPhone
    群晖的网络设置可以设置代理的,这里的代理设置可以对群晖的 docker 管理端生效(就是 web 页面 docker )。如果你是 ssh 连接直接命令的话,直接 export http proxy 或者 socks5 。
    xwchenhui
        24
    xwchenhui  
       2022-08-23 23:02:20 +08:00
    分享一个比较完美的方案,不过比较复杂:

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

    这样基本上就比较灵活了,哪些要直接出去的(比如下载工具),哪些要走旁路的可以自己搭配
    YamatoRyou
        25
    YamatoRyou  
       2022-08-24 10:33:33 +08:00
    分享一个我目前正在用的群晖 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  
       2022-08-24 10:36:59 +08:00
    @YamatoRyou 看走眼了, 以为是楼主要让容器走代理. 请无视.
    mu2er
        27
    mu2er  
       2022-08-24 11:33:14 +08:00 via iPhone
    我是群晖虚拟机上安装 openwrt ,运行 clash ,作为旁路由使用,需要科学上网的 Apple TV 等设备按需设置网关跟 dns 地址到旁路由。
    试过群晖控制面板里设置 http 代理,好像这么直接设置 docker 容器并不能走代理连接。
    可以在群晖的网络设置里修改网关地址跟 dns 为旁路由,这么整整个群晖都可以科学上网了。
    tengxunkuku
        28
    tengxunkuku  
    OP
       2022-08-24 17:36:04 +08:00
    简单方法:为 systemd 设置环境变量,DSM 中 dockerd 的父进程为 /sbin/init ,而 init 为 systemd 的一个符号链接,因此为 systemd 设置环境变量依然对 docker 起作用。参考 https://cloud.tencent.com/developer/article/1627708
    horizon
        29
    horizon  
       2023-02-01 19:03:27 +08:00
    我也遇到了这个问题。。蛋疼。
    horizon
        30
    horizon  
       2023-02-01 19:09:34 +08:00
    @tengxunkuku 老哥,我发现没有 docker.service 这个,你怎么解决的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4584 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:04 · PVG 18:04 · LAX 02:04 · JFK 05:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.