我正在尝试使用nginx反向代理在docker容器内运行测试spring启动应用程序。
Spring-boot应用程序非常简单,仅用于测试:
@Controller
public class IndexController {
@GetMapping("/")
public String index(){
return "index.html";
}
}
application.properties:
server.port=8088
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<h1>Hello from Spring-boot and Docker! =)</h1>
</body>
</html>
spring-boot的Docker文件:
FROM ubuntu:xenial
EXPOSE 8088
RUN apt-get update && apt-get install -y default-jre && apt-get install -y
maven && apt-get install -y vim
COPY test.jar /usr/src/test.jar
ENTRYPOINT ["java", "-jar","/usr/src/test.jar"]
nginx的Docker文件:
FROM ubuntu:xenial
RUN apt-get update && apt-get install -y nginx && apt-get install -y vim
RUN rm -f /etc/nginx/conf.d/default.conf
RUN rm -f /etc/nginx/nginx.conf
ADD nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
nginx配置:
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream spring {
server 0.0.0.0:8088;
}
server {
listen 80;
location / {
proxy_pass http://spring;
proxy_connect_timeout 500s;
}
}
}
所以我对这一切做了什么:
1)对于spring-boot:
docker image build -t test/spring .
docker run -d --name=spring --network=bridge -p 8888:8088 test/spring
2)对于nginx:
docker image build -t test/nginx .
docker run -d --name=nginx --network=bridge -p 8880:80 test/nginx
docker ps返回:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
158c70f8d3a0 test/nginx "nginx -g 'daemon ..." 27 minutes ago Up 27 minutes 0.0.0.0:8880->80/tcp nginx
300ff69889e8 test/spring "java -jar /usr/sr..." 13 hours ago Up 13 hours 0.0.0.0:8888->8088/tcp spring
docker network ls返回:
NETWORK ID NAME DRIVER SCOPE
186bb7934317 bridge bridge local
3b4750e698dc host host local
9acc0fd6bc9d none null local
最后,当我转到http://localhost:8888时,我会看到index.html
中的预期内容Hello from Spring-boot and Docker! =)
但是当我去http://localhost:8880/时,我有502错误代码:
502 Bad Gateway
nginx/1.10.3 (Ubuntu)
我完全迷失了,尝试了很多不同的指南但结果仍然相同。所以我试着一步一步地展示我的所作所为。 什么想法可能是错的?
答案 0 :(得分:0)
我进行了2次更改并开始正常工作。
首先是在nginx.conf文件中:
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://spring:8088;
}
}
}
我添加了
server_name localhost;
以及带有spring-boot app的容器名称后面的端口数
proxy_pass http://spring:8088;
第二次改变我仍然无法理解,我补充说
--link spring:spring
到docker run命令。在我尝试使用docker network之前,因为链接已被弃用。但现在容器在
的spity中运行后立即停止CMD ["nginx", "-g", "daemon off;"]