You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地与Docker容器化的两个Spring Boot应用如何共用8080端口?

实现本地与Docker容器中Spring Web项目共享8080端口的方案

核心思路

本地已占用8080端口,Docker容器无法直接映射到该端口,因此通过反向代理统一对外暴露8080端口,根据请求路径转发至不同服务,完全不影响本地项目的JWT验证逻辑。


方案一:用Nginx做反向代理(最常用)

步骤1:调整Docker容器的端口映射

保持Docker内部的Spring项目使用8080端口,将容器端口映射到本地空闲端口(比如8081),启动命令示例:

docker run -d -p 8081:8080 your-spring-docker-image

验证:访问http://localhost:8081能正常打开Docker内的项目即可。

步骤2:配置Nginx转发规则

编辑Nginx的站点配置文件(或nginx.conf),添加以下规则:

server {
    listen 8080;
    server_name localhost;

    # 转发请求到本地Spring项目
    location /local/ {
        proxy_pass http://localhost:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 转发请求到Docker中的Spring项目
    location /docker/ {
        proxy_pass http://localhost:8081/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

步骤3:重启Nginx生效

重启后即可通过以下地址访问两个项目:

  • 本地项目:http://localhost:8080/local/xxx(xxx为原本地项目的接口路径)
  • Docker项目:http://localhost:8080/docker/xxx(xxx为原Docker项目的接口路径)

不影响JWT验证的原因

本地项目的安全过滤器是在接收请求后处理JWT验证的,Nginx仅做请求转发,相当于客户端请求先到Nginx,再转发给本地8080项目,验证逻辑完全不受干扰,和直接访问本地8080效果一致。


方案二:用Caddy做反向代理(更简洁)

若觉得Nginx配置繁琐,可使用Caddy,配置更简单。创建Caddyfile:

localhost:8080

handle /local/* {
    reverse_proxy http://localhost:8080
}

handle /docker/* {
    reverse_proxy http://localhost:8081
}

启动Caddy后即可直接使用,效果与Nginx一致,适合不想折腾复杂配置的场景。


注意事项

  • 若本地Spring Security有IP白名单配置,需将反向代理所在IP(一般为localhost)加入白名单。
  • 如需更复杂的转发规则(如根据域名、请求头),可修改反向代理配置,灵活性极高。

内容的提问来源于stack exchange,提问作者bbe ratb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:23:09