怎样才能让我的 docker 走代理

2022-08-23 13:48:46 +08:00
tengxunkuku  tengxunkuku
今天在拉取 ghcr 镜像的时候发现速度特别慢,观察 clashlog 发现 docker 拉取一直没有走代理,搜索相关教程发现群晖的系统是深度魔改的,与通用教程不同。
系统:黑裙 DSM7.0
代理方式:docker 运行 clash
需求:docker 本身走代理
28724 次点击
所在节点   NAS  NAS
42 条回复
tengxunkuku
tengxunkuku
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
TMaize
2022-08-23 20:17:09 +08:00
可以试下这个 https://dockerproxy.com/docs 。我有时候 pull 不来下会用这个替换下源地址,然后再改下 tag
shelken
shelken
2022-08-23 22:57:50 +08:00
群晖的网络设置可以设置代理的,这里的代理设置可以对群晖的 docker 管理端生效(就是 web 页面 docker )。如果你是 ssh 连接直接命令的话,直接 export http proxy 或者 socks5 。
xwchenhui
xwchenhui
2022-08-23 23:02:20 +08:00
分享一个比较完美的方案,不过比较复杂:

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

这样基本上就比较灵活了,哪些要直接出去的(比如下载工具),哪些要走旁路的可以自己搭配
YamatoRyou
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
YamatoRyou
2022-08-24 10:36:59 +08:00
@YamatoRyou 看走眼了, 以为是楼主要让容器走代理. 请无视.
mu2er
mu2er
2022-08-24 11:33:14 +08:00
我是群晖虚拟机上安装 openwrt ,运行 clash ,作为旁路由使用,需要科学上网的 Apple TV 等设备按需设置网关跟 dns 地址到旁路由。
试过群晖控制面板里设置 http 代理,好像这么直接设置 docker 容器并不能走代理连接。
可以在群晖的网络设置里修改网关地址跟 dns 为旁路由,这么整整个群晖都可以科学上网了。
tengxunkuku
tengxunkuku
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
horizon
2023-02-01 19:03:27 +08:00
我也遇到了这个问题。。蛋疼。
horizon
horizon
2023-02-01 19:09:34 +08:00
@tengxunkuku 老哥,我发现没有 docker.service 这个,你怎么解决的
temberature
temberature
2023-11-06 18:12:24 +08:00
Apol1oBelvedere
Apol1oBelvedere
321 天前
@BugCry 如果某个 image 在 hub.docker.com 里存在而不在 https://repo.nju.edu.cn/#browse/browse:docker-hub 里面那该怎么快速拖下来呢?
charley008
charley008
301 天前
@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
301 天前
@charley008 #33
感谢,不过我现在用 https://dockerproxy.com/ 了。。
liujl
273 天前
xiaotianhu
243 天前
我是群晖 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
236 天前
@xiaotianhu 感谢你的分享,试了好多其他版本的都不对,你这个就一次成功了
sugarlovestudy
230 天前
@xiaotianhu pkg-Docker-dockerd.service 文件里面只需要放下面的代码就可以了吗? 为什么我的一直报错欸.
pkg-Docker-docker.service lacks both ExecStart= and ExecStop= setting. Refusing.
sugarlovestudy
230 天前
@hjx900 你好,请问你是怎么操作的呀。 我的报错了,service 启动不起来
sugarlovestudy
229 天前
我的群晖版本是 DSM 7.1.1-42962 Update 6. 根据本帖和 https://www.v2ex.com/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 端都可以正常的拉取镜像. 谢谢各位大佬的分享

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/874777

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX