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

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

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

群晖的 Docker 无法使用系统代理拉取镜像

  •  
  •   mekingname · 2023-10-12 22:27:50 +08:00 · 3327 次点击
    这是一个创建于 407 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:已经在 DSM 里面设置了代理。

    Docker 的“注册表”功能,可以正常显示镜像列表,说明代理生效了。

    双击注册表中的镜像名称,无法下载,查看日志,显示:Fail to pull [镜像名].

    ssh 登录群晖,执行 docker pull 镜像名,无法正常下载

    export 手动设置代理,再 docker pull 命令,还是无法正常下载。

    27 条回复    2024-07-19 12:09:53 +08:00
    hefish
        1
    hefish  
       2023-10-12 22:38:56 +08:00
    这个肯定是不行的,
    docker pull 并不是他自己去 pull ,是指挥后台的 dockerd 去 pull 。
    所以要修改启动 dockerd 的参数。
    itskingname
        2
    itskingname  
       2023-10-13 09:58:22 +08:00
    @hefish 群晖的 Docker 怎么更换 dockerd 的启动参数呢
    alexhx
        3
    alexhx  
       2023-10-13 10:06:43 +08:00
    忘了之前咋设置的了,我的现在是只能用 docker pull 命令,Web 端不行
    itskingname
        4
    itskingname  
       2023-10-13 10:09:09 +08:00
    @alexhx 我现在是 docker pull 命令都会超时
    huhhz
        5
    huhhz  
       2023-10-13 10:16:27 +08:00
    好像可以这么用
    docker pull --proxy=http://proxy.example.com:8080 <image>
    Huelse
        6
    Huelse  
       2023-10-13 10:25:49 +08:00
    qnap 就不需要自己设置代理,拉取很快
    hefish
        7
    hefish  
       2023-10-13 11:57:33 +08:00
    @itskingname 忘了,搜搜看吧。 我现在是临时搞个全局代理。 所以没设。
    itskingname
        8
    itskingname  
       2023-10-13 12:57:43 +08:00
    @hefish 临时的全局代理我也测试过了,还是拉不动
    itskingname
        9
    itskingname  
       2023-10-13 12:58:50 +08:00
    @huhhz 我看 docker 文档里面没有写这种方式
    hefish
        10
    hefish  
       2023-10-13 12:59:59 +08:00
    @itskingname 我的意思是透明的那种代理。 你等下,我来看看。
    hefish
        11
    hefish  
       2023-10-13 13:02:15 +08:00   ❤️ 1
    @itskingname 在 /var/packages/Docker/etc/dockerd.json 里。

    "proxies": {
    "default": {
    "httpProxy": "http://proxy.example.com:3128",
    "httpsProxy": "https://proxy.example.com:3129",
    "noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
    }
    }

    改好了 重启 dockerd
    huhhz
        12
    huhhz  
       2023-10-13 14:10:27 +08:00
    @huhhz
    @itskingname 不好意思记错了 ,之前用过的是 build 的时候代理,记成 pull 了。。。。。
    docker build --build-arg HTTP_PROXY="http://proxy.example.com:3128" .
    itskingname
        13
    itskingname  
       2023-10-13 14:56:04 +08:00
    @huhhz build 可以用,但是 pull 的时候没法
    lvtuyukuai
        14
    lvtuyukuai  
       2023-10-13 15:14:17 +08:00
    「设置代理软件 - 使其能代理局域网其他设备」,因为拉取镜像不是经常性的动作,我目前是用这个方法处理的。
    mianlaodie
        15
    mianlaodie  
       2023-10-13 18:43:26 +08:00 via Android
    群晖的那个出问题很久了,我现在是 SSH 过后切换 ROOT 用户拉取
    mekingname
        16
    mekingname  
    OP
       2023-10-14 21:34:45 +08:00
    @mianlaodie 我 ssh 上去用命令拉也超时
    mekingname
        17
    mekingname  
    OP
       2023-10-14 21:36:08 +08:00
    @hefish 在群晖里面没有 /var/packages/Docker 这个文件夹
    hefish
        18
    hefish  
       2023-10-14 23:28:09 +08:00
    @mekingname 我是 6.1 的黑裙。 你用 ps ax|grep dockerd 找找。
    charley008
        19
    charley008  
       197 天前   ❤️ 4
    @mekingname
    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 验证

    如果是其他版本的 dsm 的话。自己找找相应的文件名
    X-Force
        20
    X-Force  
       169 天前
    @charley008 #19 这样配置之后,是 docker 引擎和拉取镜像时使用代理,还是包括容器里的应用都会默认走代理?
    liujl
        21
    liujl  
       169 天前   ❤️ 1
    1.添加 /etc/docker/env 文件
    export HTTP_PROXY=127.0.0.1:8899


    2. 编辑 /etc/init/pkg-Docker-dockerd.conf 文件

    exec /var/packages/Docker/target/usr/bin/dockerd --config-file /var/packages/Docker/etc/dockerd.json
    改为

    #exec /var/packages/Docker/target/usr/bin/dockerd --config-file /var/packages/Docker/etc/dockerd.json
    script
    source /etc/docker/env
    /var/packages/Docker/target/usr/bin/dockerd --config-file /var/packages/Docker/etc/dockerd.json
    end script

    3. 然后,重启 docker 服务,
    停止 docker /var/packages/Docker/scripts/start-stop-status stop
    启动 docker /var/packages/Docker/scripts/start-stop-status start

    接着,你就尽情的 pull 吧,速度拉满

    黑群 6.2.3 验证可用,
    群晖 7 不知道能不能用,如果有人验证了群晖 7 ,可以留言帮助其他人,谢谢!
    StarUDream
        22
    StarUDream  
       164 天前
    和 #19 一样也可以直接修改 `/usr/local/lib/systemd/system/pkg-ContainerManager-dockerd.service` 这个文件添加环境变量。
    happydanye
        23
    happydanye  
       158 天前
    @liujl 测试有效,感谢!
    happydanye
        24
    happydanye  
       158 天前
    @liujl 不过为了以防万一,我加了两个:
    export HTTP_PROXY=127.0.0.1:8899
    export HTTPS_PROXY=127.0.0.1:8899
    liujl
        25
    liujl  
       156 天前 via Android
    @happydanye 您是群晖 7 成功了吗?
    uclinch
        26
    uclinch  
       143 天前
    @charley008
    我的系统版本是群晖 DSM 7.2.1 update5

    亲测按你的步骤操作最后可用。
    不过中间遇到了点问题,按你的步骤

    touch /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
    vim http-proxy.conf
    然后重启 docker 不行,,没有环境变量

    我直接 vim /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
    修改内容
    然后

    systemctl daemon-reload
    systemctl restart pkg-ContainerManager-dockerd.service
    systemctl show --property=Environment pkg-ContainerManager-dockerd.service 验证

    就可以了。
    happydanye
        27
    happydanye  
       127 天前
    @liujl 黑裙 6.2
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2732 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:13 · PVG 20:13 · LAX 04:13 · JFK 07:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.