我有一个问题,就是在docker容器中运行的Spring Boot应用程序,它在nginx反向代理后面运行。
为了检查docker和nginx是否正常工作,我尝试了followoging,结果和预期一样。
<code class="hljs language-java">docker run -d -p <span class="hljs-number">9001</span>:<span class="hljs-number">80</span> nginx:alpine </code><code class="hljs language-java">docker run -d -p <span class="hljs-number">9001</span>:<span class="hljs-number">80</span> nginx:alpine </code>
docker run -d -p <span class="hljs-number">9001</span>:<span class="hljs-number">80</span> nginx:alpine docker run -d -p <span class="hljs-number">9001</span>:<span class="hljs-number">80</span> nginx:alpine
docker run -d -p 9001:80 nginx:alpine
我的nginx配置看起来像
<code class="hljs language-java">server { server_name xyz.com; listen <span class="hljs-number">80</span>; location / { proxy_pass http: } } </code><code class="hljs language-java">server { server_name xyz.com; listen <span class="hljs-number">80</span>; location / { proxy_pass http: } } </code>
server { server_name xyz.com; listen <span class="hljs-number">80</span>; location / { proxy_pass http: } } server { server_name xyz.com; listen <span class="hljs-number">80</span>; location / { proxy_pass http: } }
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,正如预期。 另外,在服务器上,我通过以下方式得到欢迎页面
<code class="hljs language-java">curl http: </code><code class="hljs language-java">curl http: </code>
curl http:curl http:curl http:
我认为这表明,docker和nginx正在按预期工作。
让我们进一步朝着我的问题走下去。
现在我已经建立了一个简单的Spring Boot应用程序,它被绑定到地址0.0.0.0和端口9001。(当然,在继续之前我已经停止了nginx容器…) 构建完maven后,我用以下方式启动了应用程序
<code class="hljs language-java">java -jar app.jar </code><code class="hljs language-java">java -jar app.jar </code>
java -jar app.jarjava -jar app.jarjava -jar app.jar
在它启动后,我可以在服务器上通过以下方式接触到它
<code class="hljs language-java">curl http: </code><code class="hljs language-java">curl http: </code>
curl http:curl http:curl http:
现在,我已经停止了应用程序并建立了一个Docker文件。
<code class="hljs language-java">FROM amazoncorretto:<span class="hljs-number">11</span>-alpine-jdk COPY target/app.jar app.jar ENTRYPOINT [<span class="hljs-string">"java"</span>, <span class="hljs-string">"-jar"</span>,<span class="hljs-string">"/app.jar"</span>] </code><code class="hljs language-java">FROM amazoncorretto:<span class="hljs-number">11</span>-alpine-jdk COPY target/app.jar app.jar ENTRYPOINT [<span class="hljs-string">"java"</span>, <span class="hljs-string">"-jar"</span>,<span class="hljs-string">"/app.jar"</span>] </code>
FROM amazoncorretto:<span class="hljs-number">11</span>-alpine-jdk COPY target/app.jar app.jar ENTRYPOINT [<span class="hljs-string">"java"</span>, <span class="hljs-string">"-jar"</span>,<span class="hljs-string">"/app.jar"</span>] FROM amazoncorretto:<span class="hljs-number">11</span>-alpine-jdk COPY target/app.jar app.jar ENTRYPOINT [<span class="hljs-string">"java"</span>, <span class="hljs-string">"-jar"</span>,<span class="hljs-string">"/app.jar"</span>]
FROM amazoncorretto:11-alpine-jdk COPY target/app.jar app.jar ENTRYPOINT ["java", "-jar","/app.jar"]
首先用
latest构建镜像,然后用docker build -t app:latest .
latest运行容器。到目前为止还不错,容器启动了–很好。docker run -p 9001:9001 -d app:latest
问题是这样的。 我既不能通过xyz.com,也不能在服务器上通过
到达应用程序curl http://localhost:9001
。
但通过http://123.123.1.1:9001,就可以了!
我试着在容器内检查它
,之后docker exec -it [container] sh
工作正常。# 容器上的# wget localhost:9001
显示如下# netstat -tulpn
<code class="hljs language-java">Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">9001</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:* LISTEN <span class="hljs-number">1</span>/java </code><code class="hljs language-java">Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">9001</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:* LISTEN <span class="hljs-number">1</span>/java </code>
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">9001</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:* LISTEN <span class="hljs-number">1</span>/java Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">9001</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:* LISTEN <span class="hljs-number">1</span>/java
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
<code class="hljs language-java">Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">9001</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:* LISTEN <span class="hljs-number">607173</span>/docker-proxy tcp6 <span class="hljs-number">0</span> <span class="hljs-number">0</span> :::<span class="hljs-number">9001</span> :::* LISTEN <span class="hljs-number">607180</span>/docker-proxy </code><code class="hljs language-java">Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">9001</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:* LISTEN <span class="hljs-number">607173</span>/docker-proxy tcp6 <span class="hljs-number">0</span> <span class="hljs-number">0</span> :::<span class="hljs-number">9001</span> :::* LISTEN <span class="hljs-number">607180</span>/docker-proxy </code>
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">9001</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:* LISTEN <span class="hljs-number">607173</span>/docker-proxy tcp6 <span class="hljs-number">0</span> <span class="hljs-number">0</span> :::<span class="hljs-number">9001</span> :::* LISTEN <span class="hljs-number">607180</span>/docker-proxy Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">9001</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:* LISTEN <span class="hljs-number">607173</span>/docker-proxy tcp6 <span class="hljs-number">0</span> <span class="hljs-number">0</span> :::<span class="hljs-number">9001</span> :::* LISTEN <span class="hljs-number">607180</span>/docker-proxy
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