Nginx反向代理背后的Docker容器中的SpringBoot无法工作

我有一个问题,就是在docker容器中运行的Spring Boot应用程序,它在nginx反向代理后面运行。

为了检查docker和nginx是否正常工作,我尝试了followoging,结果和预期一样。

docker run -d -p 9001:80 nginx:alpine 

我的nginx配置看起来像

server { server_name xyz.com; listen 80; location / { proxy_pass http: } } 

现在我能够从互联网上通过xyz.com到达nginx的欢迎页面,让我们假设服务器的IP地址是123.123.1.1,通过http://123.123.1.1:9001,正如预期。 另外,在服务器上,我通过以下方式得到欢迎页面

curl http: 

我认为这表明,docker和nginx正在按预期工作。

让我们进一步朝着我的问题走下去。

现在我已经建立了一个简单的Spring Boot应用程序,它被绑定到地址0.0.0.0和端口9001。(当然,在继续之前我已经停止了nginx容器…) 构建完maven后,我用以下方式启动了应用程序

java -jar app.jar 

在它启动后,我可以在服务器上通过以下方式接触到它

curl http: 

现在,我已经停止了应用程序并建立了一个Docker文件。

FROM amazoncorretto:11-alpine-jdk COPY target/app.jar app.jar ENTRYPOINT ["java", "-jar","/app.jar"] 

首先用docker build -t app:latest .latest构建镜像,然后用docker run -p 9001:9001 -d app:latestlatest运行容器。到目前为止还不错,容器启动了–很好。

问题是这样的。 我既不能通过xyz.com,也不能在服务器上通过curl http://localhost:9001到达应用程序但通过http://123.123.1.1:9001,就可以了!

我试着在容器内检查它docker exec -it [container] sh,之后# wget localhost:9001工作正常。# 容器上的# netstat -tulpn显示如下

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:9001 0.0.0.0:* LISTEN 1/java 

同样在服务器上,$ netstat -tulpn显示如下。

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:9001 0.0.0.0:* LISTEN 607173/docker-proxy tcp6 0 0 :::9001 :::* LISTEN 607180/docker-proxy 

也许是与iptables有关的东西,但不确定是什么。 希望外面的人有办法来帮助我。 谢谢你的帮助。

更新 当我在容器内使用80端口时(Spring Boot应用程序现在在80端口而不是9001端口上进行监听)–神奇的是,它可以工作了!在容器内也尝试了8080端口–这并不工作。我也试了试容器内的8080端口–这没有用! 看起来是一个端口问题,也许有人能解释一下问题出在哪里?

原文链接:https://www.qiniu.com/qfans/qnso-68625717

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享