新手入坑求助:MT3000 Docker 容器无法内网访问
本帖最后由 Alonewader 于 2025-1-20 13:15 编辑前置情况:
1、原厂固件4.7
2、根据官方教程将根文件系统迁移到U盘
3、在软件包搜索安装 Dockerd、Dcokerman(含 zh-cn)
4、已将 Docker 的根目录变更为 /tmp/mountd/disk1_part1
5、容器部署正常、运行正常,且无报错日志
存在问题:
1、PING 容器的IP(172.17.*.*),提示无法连接端口,且内网设备无法访问(IP: Port),但用 Host 模式部署的容器可以正常访问
2、Docker 接口默认开机不运行,开启后显示“错误: 网络设备不存在”
折腾两个日夜,废寝忘食,重置无数次,反复搜索网页,仍然不得要领。恳请各位朋友予以指点!万分感谢!
曾在这个问题上困扰过,网上也没有直接答案(包括恩山),基本上网上结论是glinet官方固件版本过低且Docker组件编译有问题,所以网上MT3000、MT2500很多配置Docker的都是放弃官方固件而选择第三方openwrt固件实现Docker
不过不太信这个邪,反复测试后解决了这个问题:
1、很重要的一个坑:在网关路由器上Docker的桥接网络模式工作不正常
解决方法:改用host模式后可以兼容,即:docker run ... 改成 docker run... --net=host...
2、glinet官方仓库里Dcokerman编译的确实有问题,docker设置面板里少了重要的下面Dcokerman选项卡
解决方法:自己到 https://github.com/lisaac/luci-app-dockerman/releases Dcokerman官方网站下载最新版luci-lib-docker和luci-app-dockerman安装就好了
3、要在MT3000上运行Docker,最好将512M运行内存升级到1024M
实测MT3000安装docker后运行内存会长期处于占用400M以上,若想让整个设备网络和docker容器工作稳定,替换内存颗粒还是很有必要的
以上三步按此操作完,glinet官方21低版本内核固件照样稳定运行docker,全是反复测试的经验之谈,网上无相同解决方案!祝你好运!
另外送给glinet官方的PS:你们的仓库能不能把自己编译的错版Dcokerman删除了,换成最新版的,好好一个仓库完全没人好好去维护:@ 感谢热心朋友Oasis的详细回复!让我在黑暗中看到了光明!
针对您提出的解决方案,我还有几点疑问,烦请作答!
1、是不是所有的部署命令都可以加--net=host改为Host模式?
2、一直没搞明白Docker与Dockerd的逻辑关系,最后一次重置后,按照官方论坛某要员关于在MT2500安装Docker的帖子,只安装了Dockerd、Dcokerman,没有安装Docker,不知道到底应该安装哪个?
我的机子还没到手就直接发咸鱼高手改内存了,现在的内存占用已经超过50%了。
另外,作为一个玩了十多年软路由的资深小白,对这个机子确实感到烧脑,如果要玩,还是X86或者方块OP比较好。
最后,再次感谢您! Oasis.cn 发表于 2025-1-20 14:58
曾在这个问题上困扰过,网上也没有直接答案(包括恩山),基本上网上结论是glinet官方固件版本过低且Docker ...
能否请您告诉我具体的安装方法?:loveliness: 我的理解:
1、差不多是这个意思,不过桥接模式用P参数可以做容器和宿主机服务端口映射,换成host模式我个人感觉如果端口有冲突最好到docker容器里自个手动把配置改一下,反正条条大路通罗马,活用就好了;
2、你把Dockerd、Dcokerman(luci-lib-docker、luci-app-dockerman)想成是Docker运行所需的内核、扩展库、配置插件三个部分就好理解了,Dockerd是内核常驻进程,没它后台容器就跑不起来;Dcokerman就是个基于界面交互(无需命令行)配置插件而已,它有毛病不影响后台容器运行,但交互配置肯定有阻碍;luci-lib-docker就是Dcokerman的依赖支持库,新版Dcokerman新特性需要新版lib库支持,如果用旧版lib鬼知道有什么不稳定 Alonewader 发表于 2025-1-20 15:50
能否请您告诉我具体的安装方法?
按下面顺序步骤安装就好了:
-------------------------------------------
1、gilent官方仓库装dockerd;
2、自己到 https://github.com/lisaac/luci-app-dockerman/releases Dcokerman官方网站下载最新版luci-lib-docker和luci-app-dockerman先装lib后装dockerman就好了
如果不幸装了gilent官方仓库的dockerman,那就opg remove把旧版错版的lib和dockerman全卸载干净了再安装新版 Oasis.cn 发表于 2025-1-20 16:02
按下面顺序步骤安装就好了:
-------------------------------------------
1、gilent官方仓库装dockerd ...
luci-app-dockerman是ipk,可以直接安装,但luci-lib-docker没有找到ipk文件,不知道怎么安装。多谢! Oasis.cn 发表于 2025-1-20 15:50
我的理解:
1、差不多是这个意思,不过桥接模式用P参数可以做容器和宿主机服务端口映射,换成host模式我个 ...
我理解了!非常感谢! 唯一有一点要补充的就是:如果用glinet 21内核固件的话,dockerd一定要用glinet仓库的,不要去更新github上最新24内核编译的dockerd,会报网络接口错误。用gilnet官方网络接口配置适配编译的官方21内核dockerd+最新版本dockerman就能很好的在21旧内核下稳定运行Docker及容器 Oasis.cn 发表于 2025-1-20 16:07
唯一有一点要补充的就是:如果用glinet 21内核固件的话,dockerd一定要用glinet仓库的,不要去更新github上 ...
请问安装LuCI in Docker,是一次输入下列命令吗?:P
docker pull lisaac/luci:latest
docker run -d \
--name luci \
--restart unless-stopped \
--privileged \
-p 80:80 \
-p 7682:7682 \
-e TZ=Asia/Shanghai \
-v $HOME/pods/luci:/external:rslave \
-v /media:/media:rshared \
-v /dev:/dev:rslave \
-v /var/run/docker.sock:/var/run/docker.sock \
--tmpfs /tmp:exec \
--tmpfs /run \
lisaac/luci:latest 先luci安装dcokerd,然后上传安装dockerman,再SSH安装LuCI in Docker(nano,因已安装dockerman),报错:
docker: Error response from daemon: driver failed programming external connectivity on endpoint luci (799292f7dde82fa16e35377b69c43282c9867e5baa5eb7ce894f7299142f9480): failed to bind port 0.0.0.0:80/tcp: Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use.
唉,还能不能愉快地玩耍了?太累,不折腾了。 Alonewader 发表于 2025-1-20 19:38
先luci安装dcokerd,然后上传安装dockerman,再SSH安装LuCI in Docker(nano,因已安装dockerman),报错: ...
哎!服了你了,从你问题发问的严谨程度,以为你摸索了多年软路由有一定基础,没想到步骤说的很清楚了,你那操作还是有问题。没办法,给你做了个run零基础配置安装包,里面除了固化我的安装步骤外多了个dockerman最新版中文语言包,你也不用到处去找了,直接下载附件并解压到路由器/tmp下,sh /tmp/docker-glinet_dockerman-0.5.26.run无忧安装就好了。至于docker容器安装,不用专门pull单独执行一遍,你docker run执行的时候如果镜像没拉取到本地他会自动拉取的 Oasis.cn 发表于 2025-1-20 20:21
哎!服了你了,从你问题发问的严谨程度,以为你摸索了多年软路由有一定基础,没想到步骤说的很清楚了,你 ...
朋友,你好!
对你的感激无以言表!
但不幸的是,安装LuCI in Docker时还是报错:Error response from daemon: path /media is mounted on / but it is not a shared mount,且容器处于Created状态。
此外,dockerman管理界面里的网络页面显示几行代码:
/usr/lib/lua/luci/model/cbi/dockerman/networks.lua:44: attempt to index field 'Config' (a nil value)
stack traceback:
/usr/lib/lua/luci/model/cbi/dockerman/networks.lua:44: in function 'get_networks'
/usr/lib/lua/luci/model/cbi/dockerman/networks.lua:51: in function 'func'
/usr/lib/lua/luci/cbi.lua:66: in function 'load'
/usr/lib/lua/luci/dispatcher.lua:1499: in function '_form'
/usr/lib/lua/luci/dispatcher.lua:1027: in function 'dispatch'
/usr/lib/lua/luci/dispatcher.lua:479: in function </usr/lib/lua/luci/dispatcher.lua:478>
这个问题在此之前安装这个dockerman后也是如此。
抱歉!没有让你看到你希望的结果。对你的热心帮助,本人除了感激还是感激! Alonewader 发表于 2025-1-20 21:52
朋友,你好!
对你的感激无以言表!
你怎么着也得把这个配置成你MT3000扩展的USB分区已创建的目录吧,至少应该是/tmp/mounted/disk1_part1/xxx这样的目录 你的问题是基础知识太薄弱了,网上摘抄的linux docker应用的例子你拿来直接在MT3000里就用,也不去管人家例子里每个参数的含义,以及哪些需要根据你本地环境来修改 越来越看不明白你的意图了!?MT3000本身就内置了openwrt的luci。你费一番功夫在MT3000里装上docker,然后给docker里面再装个lisaac/luci luci容器干啥呢???有些不明白 你找的docker安装步骤能不能仔细看一下,你搜的教程所谓安装luci-in-docker,指的是给x86平台Linux下安装luci来管理docker的界面的教程方法...........哎,经念歪了.....你把MT3000恢复出厂,重新USB扩展根目录容量,运行我的docker安装run模块,基于MT3000稳定版docker服务就已经安装好并启动了。其他别去装不适用的luci-in-docker,直接去https://hub.docker.com找你想装的镜像安装就好了,很简单的东西被你搞复杂了 Oasis.cn 发表于 2025-1-20 22:25
越来越看不明白你的意图了!?MT3000本身就内置了openwrt的luci。你费一番功夫在MT3000里装上docker,然后 ...
我是根据你这段话才安装luci-in-docker的:$
解决方法:自己到 https://github.com/lisaac/luci-app-dockerman/releases Dcokerman官方网站下载最新版luci-lib-docker和luci-app-dockerman安装就好了 让你到Dcokerman项目官网下载的是luci-lib-docker和luci-app-dockerman,那里哪来的luci-in-docker???你是不是看岔到你自己搜索打开的URL了 Oasis.cn 发表于 2025-1-20 22:44
让你到Dcokerman项目官网下载的是luci-lib-docker和luci-app-dockerman,那里哪来的luci-in-docker???你 ...
多谢朋友!请问安装这两个ipk就不用部署那个容器了,是吗?
页:
[1]
2