docker 映射端口外部设备访问不到
容器内部
查看服务是否开启,以nginx为例
1 | ps -ef | grep nginx |
返回类似于以下图片,说明服务已经启动
1 | systemctl stop firewalld |
如果容器有防火墙,可以先关闭防火墙试一下
先查一下防火墙的状态,如果为下图就是关着呢
宿主机
先看容器是否正确映射端口
下图画红框的地方就是将容器内部的nginx服务映射到宿主机的32770端口,如果这里没有映射,那么外部设备肯定访问不到。
查看宿主机端口是否开启
1 | ss -tlnp | grep 32770 |
类似于以下输出,说明端口没问题
如果还是访问不了,那么就是防火墙的问题了,可以尝试关闭防火墙。
1 | systemctl stop firewalld |
类似于下图就是关着呢
配置iptables使得所有流量都允许,可以通过以下命令清除当前的规则并设置允许所有的流量。
1 | sudo iptables -F # 清除所有链中的规则 |
设置默认链为 ACCEPT,表示允许所有的传入、传出流量。执行以下命令:
1 | sudo iptables -P INPUT ACCEPT # 允许所有进入流量 |
无需重启,立刻生效
默认情况下,iptables 规则在系统重启后会丢失。
根据系统版本不同,可以上网搜索对应的方法,将iptables规则保存下来,防止重启后失效。
容器内部
外部设备访问 http://宿主机:映射的端口 如果是以下页面,说明连接没问题,大概率是内部服务或代理的问题
我这里是后端的jar包端口映射错了,需要改运行的端口为8080
直接用命令复制jar包到宿主机再复制到本地windows电脑下
1 | docker cp b634d0b5d430:/root/question-1.0.jar ./ |
然后用解压工具打开question-1.0.jar,修改 BOOT-INF\classes\目录下的application.yml文件
再复制回docker中,重新运行jar包
1 | docker cp ./question-1.0.jar b634d0b5d430:/root/question-1.0.jar |
先查看之前运行的任务,然后结束他
结束之后重新运行,因为之前已经复制jar包到容器中,所以直接运行就OK
这里的 nohup command & 是让jar包在后台运行
运行后可以看一下 nohup 的日志文件看看运行成功没有,这样是运行成功了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 FlyTeng!
评论