gpt4 book ai didi

ubuntu - 无法为 spring boot 配置 docker 和 nginx

转载 作者:行者123 更新时间:2023-12-04 18:45:17 24 4
gpt4 key购买 nike

我正在尝试使用 nginx 反向代理在 docker 容器内运行测试 spring boot 应用程序。

Spring-boot 应用程序非常简单,仅用于测试:

@Controller
public class IndexController {

@GetMapping("/")
public String index(){
return "index.html";
}
}

应用程序属性:
server.port=8088

索引.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)

我完全迷失了,尝试了很多不同的指南,但结果还是一样。所以我试图一步一步地展示我在做什么。
有什么想法可能是错的吗?

最佳答案

我做了 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 应用程序的容器名称后的端口号
proxy_pass http://spring:8088;

第二个变化我还是不能完全理解,我补充说
--link spring:spring 

到 docker run 命令。在我尝试使用 docker 网络之前,因为不推荐使用链接。但是现在容器在运行后立即停止
CMD ["nginx", "-g", "daemon off;"]

关于ubuntu - 无法为 spring boot 配置 docker 和 nginx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47476817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com