
问题出在你的 Nginx 配置文件/etc/nginx/conf.d/default.conf第 19 行。你使用了host.docker.internal这个域名来指向后端服务但在 Linux 服务器的原生 Docker 环境中这个域名默认是不存在的导致 Nginx 启动时无法解析地址而直接崩溃。解决方案你有两种方法可以修复这个问题推荐使用方法一方法一修改启动命令最简单在docker run命令中添加--add-host参数手动告诉容器host.docker.internal对应的 IP 是宿主机网关。请执行以下命令重启容器# 1. 先删除报错的旧容器 docker rm -f nginx # 2. 使用新命令启动注意增加了 --add-host 参数 docker run -d --name nginx -p 80:80 \ --add-hosthost.docker.internal:host-gateway \ -v /etc/nginx/dist:/usr/share/nginx/html \ -v /etc/nginx/conf.d:/etc/nginx/conf.d \ nginx原理host-gateway会自动解析为宿主机的内部 IP通常是172.17.0.1这样容器就能通过这个域名找到宿主机上的 Java 后端了。方法二修改 Nginx 配置文件如果你不想改启动命令可以直接修改服务器上的配置文件/etc/nginx/conf.d/default.conf。打开文件vim /etc/nginx/conf.d/default.conf找到第 19 行将proxy_pass http://host.docker.internal:端口号;中的host.docker.internal替换为宿主机的真实局域网 IP例如192.168.x.x或者Docker 网关 IP通常是172.17.0.1。保存后重启容器docker restart nginx为什么会出现这个问题Windows/Mac 用户Docker Desktop 会自动配置host.docker.internal所以很多教程里都这么写。Linux 服务器用户原生的 Docker Engine 不会自动配置这个 DNS 记录。Nginx 在启动阶段会严格检查所有upstream域名的有效性一旦解析失败就会拒绝启动这就是你看到的[emerg]错误。验证是否成功执行完上述操作后运行docker ps。如果看到nginx容器的状态是Up ...而不是Exited就说明启动成功了。此时你可以访问服务器 IP 测试前端页面和接口代理是否正常。