为何使用--net=container:myTomcat启动的busybox未接入myNetwork且访问tomcat报404
问题原因
- 你启动busybox时使用的
--net=container:myTomcat属于容器共享网络栈模式,不是直接将busybox加入myNetwork网络。该模式下busybox会完全复用myTomcat的网络命名空间,不会单独在myNetwork中注册网络端点,因此docker network inspect myNetwork和busybox的Networks字段没有相关信息属于正常现象,并非网络配置故障。 - 你遇到的
HTTP/1.1 404错误和网络连通性无关:404是tomcat服务正常返回的HTTP状态码,说明请求已经成功从busybox发送到tomcat,网络实际是连通的,报错只是因为官方tomcat镜像默认根路径没有部署服务内容。
解决方案
验证网络连通性
进入busybox容器执行ping 127.0.0.1或telnet 127.0.0.1 8080,能正常连通即可确认网络无问题。
修复404错误
官方tomcat镜像默认将首页相关文件存放在webapps.dist目录,webapps目录为空,你可以进入myTomcat容器执行以下命令恢复默认首页:
cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/
执行完成后回到busybox再次执行wget localhost:8080即可正常获取tomcat首页内容。
若需要busybox单独加入myNetwork网络
如果不需要共享myTomcat的网络栈,希望busybox作为独立节点加入myNetwork,请使用以下命令启动busybox:
docker run -it --name myBusybox --net=myNetwork busybox
启动后即可在docker network inspect myNetwork中看到busybox的网络信息,此时在busybox中可以直接通过容器名访问tomcat服务:
wget myTomcat:8080
内容的提问来源于stack exchange,提问作者lophih
相关产品推荐
相关产品推荐

