用另外一台电脑作为服务器,运行项目,因为要用到reids,但是win版的reids只支持到5,想用更高版本的,只能另想他法,于是装了个docker desktop。

有需要的可以参考win10/11安装docker,虽然是win10的,但win11上也适用。要注意的就是wsl2,如果默认的子系统不是docker-desktop,那docker desktop启动的时候会一直提示连接wsl失败。修改下默认子系统就好了。

安装顺利完成,然后在docker上部署了一个redis6的服务,本地项目启动也能正常访问到redis。但是,用其他电脑就无法访问redis,但是访问刚刚启动的项目是能正常访问。

当时也没太在意,也干脆不提供给其他人用,将就着。

然鹅,报应来得太快。几天后让部署成服务,不要用IDE工具运行。打包、构建镜像、启动服务一气呵成,本地访问完全没问题。也没在其他电脑上试过。

java服务部署到docker中可以参考 docker desktop使用手册

然后悲剧就发生了:当我突然想上去看下的时候,发现我的电脑访问不了这个服务了。很明显,docker服务的映射有问题了。怎么解决?

第一步,确认检查端口映射与绑定地址是否正确

确保 Docker 容器端口正确映射到宿主机(你的电脑)的 ​所有网络接口,而不仅仅是本地回环地址
(啥意思?我也不懂,反正照着往后操作就行)

使用 docker ps 命令查看当前容器的端口映射情况。确认 PORTS 一列中,映射是类似 0.0.0.0:宿主机端口->容器端口/tcp,而不是 127.0.0.1:宿主机端口->容器端口/tcp。
如图所示就是正确的,如果是172.0.0.1:xxxx->xx/tcp那就成了仅仅是本地回环地址
正确的地址地址
如果只是做了本地回环映射,可以尝试这种方式修复:
docker run -p 0.0.0.0:宿主机端口:容器端口 … [其他参数] 镜像名
也就是在docker run的时候指定ip为0.0.0.0

当然,如果你没有“做”一般这个是不会有问题的,至少我的默认就是正常的,不用额外设置[\狗头]

第二步,检查windows防火墙入站规则

嗯,这个就不解释了,因为我也不知道该怎么解释。反正照着做就行了
打开命令行界面(cmd或者PowerShell都行),输入wf.msc,敲回车,然后稍等一下下会打开一个窗口,长这样:
窗口

然后就看到有个叫“入站规则”的玩意的吧,别犹豫,点他;再然后你就会在旁边看见有的是绿色代√的图标,有的是红色禁止图标的
这样的
然后找到两个叫docker xxxx的,看看它的图标是不是红的。
这俩

如果是红的,双击 或 者右键->属性,打开的界面中,选择“允许连接”,“确定”。
这里
当然,你想选“只允许安全连接”,我也没办法,我也不知道选了有什么后果。当然,如果你选择了“阻止连接”,那就是连不上了。

然后我就能在其他电脑上正常访问服务和redis了。

对了,中间还出了点小状况,我在其他电脑上ping这台“服务器”的ip的时候是ping不通的。然后在点击【我的电脑】 -> 左侧【网络】的时候,窗口顶部有一串提示我禁用了本地文件打印机被禁用,然后打开后能正常ping了,但是还是访问不了docker中部署的服务。

最后

如果你的问题还没解决,那你的看看的防火墙是不是配置得做下修改(我也不记得该怎么去设置了ヾ(≧O≦)〃嗷~),毕竟我一开始 使用IDE启动的服务是能被正常访问的,只是docker中的服务无法被访问

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐