怎样才能让我的 docker 走代理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
tengxunkuku
V2EX    NAS

怎样才能让我的 docker 走代理

  •  
  •   tengxunkuku 2022-08-23 13:48:46 +08:00 31792 次点击
    这是一个创建于 1147 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天在拉取 ghcr 镜像的时候发现速度特别慢,观察 clashlog 发现 docker 拉取一直没有走代理,搜索相关教程发现群晖的系统是深度魔改的,与通用教程不同。
    系统:黑裙 DSM7.0
    代理方式:docker 运行 clash
    需求:docker 本身走代理
    42 条回复    2024-10-11 19:33:17 +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 模式就行
    n3yKZn7vykSRL0xz
        13
    n3yKZn7vykSRL0xz  
       2022-08-23 15:40:39 +08:00 via Android   1
    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 挂梯子
    40EaE5uJO3Xt1VVa
        16
    40EaE5uJO3Xt1VVa  
       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
    40EaE5uJO3Xt1VVa
        18
    40EaE5uJO3Xt1VVa  
       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   1
    可以试下这个 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 这个,你怎么解决的
    Apol1oBelvedere
        32
    Apol1oBelvedere  
       2024-04-20 00:07:42 +08:00
    @BugCry 如果某个 image 在 hub.docker.com 里存在而不在 https://repo.nju.edu.cn/#browse/browse:docker-hub 里面那该怎么快速拖下来呢?
    charley008
        33
    charley008  
       2024-05-10 12:27:45 +08:00   2
    @horizon
    @tengxunkuku
    dsm7.2
    docker 本身走代理
    mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d
    touch /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
    vim http-proxy.conf

    [Service]
    EnvirOnment="HTTP_PROXY=http://192.168.1.3:1088"
    EnvirOnment="HTTPS_PROXY=http://192.168.1.3:1088"
    EnvirOnment="NO_PROXY=localhost,127.0.0.1"

    systemctl daemon-reload
    systemctl restart pkg-ContainerManager-dockerd.service
    systemctl show --property=Environment pkg-ContainerManager-dockerd.service 验证
    horizon
        34
    horizon  
       2024-05-10 13:46:34 +08:00
    @charley008 #33
    感谢,不过我现在用 https://dockerproxy.com/ 了。。
    liujl
        35
    liujl  
       2024-06-07 15:23:49 +08:00
    黑群 6.2.3 测试有效
    t/981481?p=1#r_14833577
    xiaotianhu
        36
    xiaotianhu  
       2024-07-07 11:09:50 +08:00
    我是群晖 7.1 ,没有 ContainerManager ,Mac 上开 clash 允许 Lan 访问,配置下代理:

    目录:/usr/local/lib/systemd/system
    vim pkg-Docker-dockerd.service
    systemctl daemon-reload
    systemctl restart pkg-Docker-dockerd

    ```
    [Service]
    EnvirOnment="HTTP_PROXY=http://192.168.1.10:7890"
    EnvirOnment="HTTPS_PROXY=http://192.168.1.10:7890"
    EnvirOnment="NO_PROXY=localhost,127.0.0.1"
    ```

    测试成功
    hjx900
        37
    hjx900  
       2024-07-14 19:58:08 +08:00
    @xiaotianhu 感谢你的分享,试了好多其他版本的都不对,你这个就一次成功了
    sugarlovestudy
        38
    sugarlovestudy  
       2024-07-20 03:12:13 +08:00
    @xiaotianhu pkg-Docker-dockerd.service 文件里面只需要放下面的代码就可以了吗? 为什么我的一直报错.
    pkg-Docker-docker.service lacks both ExecStart= and ExecStop= setting. Refusing.
    sugarlovestudy
    &nbp;   39
    sugarlovestudy  
       2024-07-20 03:13:02 +08:00
    @hjx900 你好,请问你是怎么操作的呀。 我的报错了,service 启动不起来
    sugarlovestudy
        40
    sugarlovestudy  
       2024-07-20 23:11:33 +08:00   1
    我的群晖版本是 DSM 7.1.1-42962 Update 6. 根据本帖和 t/981481?p=1#r_14833577 大佬们的方法, 尝试均失败, 因此摸索出了针对我这个版本的方法. 失败的原因应该是群晖不同版本`docker.service`的名字以及路径都不一样.
    1. 「设置代理软件 - 使其能代理局域网其他设备」
    2. `/usr/local/lib/systemd/system`, 修改`pkg-Docker-dockerd.service`
    添加如下内容
    ```
    [Service]
    EnvirOnment="HTTP_PROXY=http://192.168.1.3:1088"
    EnvirOnment="HTTPS_PROXY=http://192.168.1.3:1088"
    EnvirOnment="NO_PROXY=localhost,127.0.0.1"
    ```
    3. 接着重启 docker.
    停止 docker :` /var/packages/Docker/scripts/start-stop-status stop `
    启动 docker :` /var/packages/Docker/scripts/start-stop-status start`

    测试该方法设置之后,在群晖的网页管理界面和 ssh 端都可以正常的拉取镜像. 谢谢各位大佬的分享
    hjx900
        41
    hjx900  
       2024-07-22 20:50:26 +08:00
    @sugarlovestudy 对的,就是版本不同文件名字路径不同。。也不知道为啥群晖要这么设置。。
    Gitss
        42
    Gitss  
       2024-10-11 19:33:17 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5446 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 07:40 PVG 15:40 LAX 00:40 JFK 03:40
    Do have faith in what you're doing.
    ubao 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