forum.gl-inet.cn

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
    查看: 8767|回复: 35

    [问题反馈] 新手入坑求助:MT3000 Docker 容器无法内网访问

    [复制链接]

    1

    主题

    19

    帖子

    55

    积分

    注册会员

    Rank: 2

    积分
    55
     楼主| 发表于 2025-1-20 13:11:53 | 显示全部楼层 |阅读模式
    本帖最后由 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 接口默认开机不运行,开启后显示“错误: 网络设备不存在”

    折腾两个日夜,废寝忘食,重置无数次,反复搜索网页,仍然不得要领。恳请各位朋友予以指点!万分感谢!







    回复

    使用道具 举报

    3

    主题

    112

    帖子

    1364

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1364
    发表于 2025-1-20 14:58:13 | 显示全部楼层
    曾在这个问题上困扰过,网上也没有直接答案(包括恩山),基本上网上结论是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删除了,换成最新版的,好好一个仓库完全没人好好去维护
    回复

    使用道具 举报

    1

    主题

    19

    帖子

    55

    积分

    注册会员

    Rank: 2

    积分
    55
     楼主| 发表于 2025-1-20 15:34:32 | 显示全部楼层
    感谢热心朋友Oasis的详细回复!让我在黑暗中看到了光明!
    针对您提出的解决方案,我还有几点疑问,烦请作答!
    1、是不是所有的部署命令都可以加--net=host改为Host模式?
    2、一直没搞明白Docker与Dockerd的逻辑关系,最后一次重置后,按照官方论坛某要员关于在MT2500安装Docker的帖子,只安装了Dockerd、Dcokerman,没有安装Docker,不知道到底应该安装哪个?

    我的机子还没到手就直接发咸鱼高手改内存了,现在的内存占用已经超过50%了。

    另外,作为一个玩了十多年软路由的资深小白,对这个机子确实感到烧脑,如果要玩,还是X86或者方块OP比较好。

    最后,再次感谢您!
    回复

    使用道具 举报

    1

    主题

    19

    帖子

    55

    积分

    注册会员

    Rank: 2

    积分
    55
     楼主| 发表于 2025-1-20 15:50:03 | 显示全部楼层
    Oasis.cn 发表于 2025-1-20 14:58
    曾在这个问题上困扰过,网上也没有直接答案(包括恩山),基本上网上结论是glinet官方固件版本过低且Docker ...

    能否请您告诉我具体的安装方法?
    回复

    使用道具 举报

    3

    主题

    112

    帖子

    1364

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1364
    发表于 2025-1-20 15:50:56 | 显示全部楼层
    我的理解:
    1、差不多是这个意思,不过桥接模式用P参数可以做容器和宿主机服务端口映射,换成host模式我个人感觉如果端口有冲突最好到docker容器里自个手动把配置改一下,反正条条大路通罗马,活用就好了;
    2、你把Dockerd、Dcokerman(luci-lib-docker、luci-app-dockerman)想成是Docker运行所需的内核、扩展库、配置插件三个部分就好理解了,Dockerd是内核常驻进程,没它后台容器就跑不起来;Dcokerman就是个基于界面交互(无需命令行)配置插件而已,它有毛病不影响后台容器运行,但交互配置肯定有阻碍;luci-lib-docker就是Dcokerman的依赖支持库,新版Dcokerman新特性需要新版lib库支持,如果用旧版lib鬼知道有什么不稳定
    回复

    使用道具 举报

    3

    主题

    112

    帖子

    1364

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1364
    发表于 2025-1-20 16:02:38 | 显示全部楼层
    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全卸载干净了再安装新版
    回复

    使用道具 举报

    1

    主题

    19

    帖子

    55

    积分

    注册会员

    Rank: 2

    积分
    55
     楼主| 发表于 2025-1-20 16:05:24 | 显示全部楼层
    Oasis.cn 发表于 2025-1-20 16:02
    按下面顺序步骤安装就好了:
    -------------------------------------------
    1、gilent官方仓库装dockerd ...

    luci-app-dockerman是ipk,可以直接安装,但luci-lib-docker没有找到ipk文件,不知道怎么安装。多谢!
    回复

    使用道具 举报

    1

    主题

    19

    帖子

    55

    积分

    注册会员

    Rank: 2

    积分
    55
     楼主| 发表于 2025-1-20 16:07:20 | 显示全部楼层
    Oasis.cn 发表于 2025-1-20 15:50
    我的理解:
    1、差不多是这个意思,不过桥接模式用P参数可以做容器和宿主机服务端口映射,换成host模式我个 ...

    我理解了!非常感谢!
    回复

    使用道具 举报

    3

    主题

    112

    帖子

    1364

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1364
    发表于 2025-1-20 16:07:26 | 显示全部楼层
    唯一有一点要补充的就是:如果用glinet 21内核固件的话,dockerd一定要用glinet仓库的,不要去更新github上最新24内核编译的dockerd,会报网络接口错误。用gilnet官方网络接口配置适配编译的官方21内核dockerd+最新版本dockerman就能很好的在21旧内核下稳定运行Docker及容器
    回复

    使用道具 举报

    1

    主题

    19

    帖子

    55

    积分

    注册会员

    Rank: 2

    积分
    55
     楼主| 发表于 2025-1-20 18:07:30 | 显示全部楼层
    Oasis.cn 发表于 2025-1-20 16:07
    唯一有一点要补充的就是:如果用glinet 21内核固件的话,dockerd一定要用glinet仓库的,不要去更新github上 ...

    请问安装LuCI in Docker,是一次输入下列命令吗?
    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
    回复

    使用道具 举报

    1

    主题

    19

    帖子

    55

    积分

    注册会员

    Rank: 2

    积分
    55
     楼主| 发表于 2025-1-20 19:38:12 | 显示全部楼层
    先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.

    唉,还能不能愉快地玩耍了?太累,不折腾了。

    点评

    把你命令里-p 80:80 改成 -p 81:80 就可以绕开路由器已占用80端口,改用81端口访问你容器web服务了  发表于 2025-1-20 20:30
    你这是80端口被占用错误,是安装镜像部署容器报的错,不是docker安装的问题。你给你的容器运行改个映射端口不就好了  发表于 2025-1-20 20:25
    回复

    使用道具 举报

    3

    主题

    112

    帖子

    1364

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1364
    发表于 2025-1-20 20:21:39 | 显示全部楼层
    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执行的时候如果镜像没拉取到本地他会自动拉取的

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    1

    主题

    19

    帖子

    55

    积分

    注册会员

    Rank: 2

    积分
    55
     楼主| 发表于 2025-1-20 21:52:10 | 显示全部楼层
    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后也是如此。

    抱歉!没有让你看到你希望的结果。对你的热心帮助,本人除了感激还是感激!

    点评

    你这一长串命令docker run ... -v /media:/media:rshared ... lisaac/luci:latest 从哪抄的?不修改一下就粘贴到MT3000里执行?MT3000就没/media这个目录  发表于 2025-1-20 22:14
    回复

    使用道具 举报

    3

    主题

    112

    帖子

    1364

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1364
    发表于 2025-1-20 22:16:44 | 显示全部楼层
    Alonewader 发表于 2025-1-20 21:52
    朋友,你好!

    对你的感激无以言表!

    你怎么着也得把这个配置成你MT3000扩展的USB分区已创建的目录吧,至少应该是/tmp/mounted/disk1_part1/xxx这样的目录
    回复

    使用道具 举报

    3

    主题

    112

    帖子

    1364

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1364
    发表于 2025-1-20 22:19:30 | 显示全部楼层
    你的问题是基础知识太薄弱了,网上摘抄的linux docker应用的例子你拿来直接在MT3000里就用,也不去管人家例子里每个参数的含义,以及哪些需要根据你本地环境来修改
    回复

    使用道具 举报

    3

    主题

    112

    帖子

    1364

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1364
    发表于 2025-1-20 22:25:22 | 显示全部楼层
    越来越看不明白你的意图了!?MT3000本身就内置了openwrt的luci。你费一番功夫在MT3000里装上docker,然后给docker里面再装个lisaac/luci luci容器干啥呢???有些不明白
    回复

    使用道具 举报

    3

    主题

    112

    帖子

    1364

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1364
    发表于 2025-1-20 22:34:37 | 显示全部楼层
    你找的docker安装步骤能不能仔细看一下,你搜的教程所谓安装luci-in-docker,指的是给x86平台Linux下安装luci来管理docker的界面的教程方法...........哎,经念歪了.....你把MT3000恢复出厂,重新USB扩展根目录容量,运行我的docker安装run模块,基于MT3000稳定版docker服务就已经安装好并启动了。其他别去装不适用的luci-in-docker,直接去https://hub.docker.com找你想装的镜像安装就好了,很简单的东西被你搞复杂了
    回复

    使用道具 举报

    1

    主题

    19

    帖子

    55

    积分

    注册会员

    Rank: 2

    积分
    55
     楼主| 发表于 2025-1-20 22:39:03 | 显示全部楼层
    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安装就好了
    回复

    使用道具 举报

    3

    主题

    112

    帖子

    1364

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1364
    发表于 2025-1-20 22:44:44 | 显示全部楼层
    让你到Dcokerman项目官网下载的是luci-lib-docker和luci-app-dockerman,那里哪来的luci-in-docker???你是不是看岔到你自己搜索打开的URL了

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    1

    主题

    19

    帖子

    55

    积分

    注册会员

    Rank: 2

    积分
    55
     楼主| 发表于 2025-1-20 23:02:03 | 显示全部楼层
    Oasis.cn 发表于 2025-1-20 22:44
    让你到Dcokerman项目官网下载的是luci-lib-docker和luci-app-dockerman,那里哪来的luci-in-docker???你 ...

    多谢朋友!请问安装这两个ipk就不用部署那个容器了,是吗?
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|gl-inet.cn ( 粤ICP备18130956号 )

    GMT+8, 2025-3-12 19:03 , Processed in 0.027884 second(s), 25 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表