需要使用docker将golang的httpserver容器化。在这个过程中遇到了一个低级问题,golang http服务时端口无法访问,特此记录解决这个问题的过程。
1.背景
1.1 问题描述
问题描述: docker镜像启动成果之后,通过curl不能访问:
1.2 webserver代码
go文件:main.go
3.Dockerfile文件
Dockerfile文件:
2.问题分析
发现curl无法访问docker容器中的服务,telnet结果如下:
于是,打算采用命令进入docker容器内部查看:
通过docer ps -a 得到容器id为dfb2b46abd34。进入容器:
可以看到,在容器内部实际上8360端口已经被监听。容器访问应该不存在问题。 容器内部支持wget:
可以看到在docker服务内部运行是正常的。
查看其网络端口衍射:
端口衍射也不存在问题。那么问题究竟出在什么地方呢? 忽然想到,容器内部的nestat监听端口是127.0.0.1,于是瞬间明白了。 在容器内部的监听端口为127.0.0.1的话,那么只能接受容器内部来自127.0.0.1的本地回环访问。来自容器外外部的访问请求将被拒绝。 因此,这个问题的修复原因实际上很简单,只需要将main.go的中监听ip改为0.0.0.0即可。
3.解决方案
果断将监听ip改为0.0.0.0:
之后重新制作镜像:
然后启动本地镜像:
启动之后:
之后再访问新增的容器,结果正常:
问题解决。
到此这篇关于docker部署golang http服务时端口无法访问的问题解决的文章就介绍到这了,更多相关docker部署golang http内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://juejin.cn/post/7128165664610598943