Post

⭐️生产环境中docker部署express和nginx服务的网络访问问题

项目是一个vue开发的网站项目,其中有一个功能是需要通过输入授权码,验证成功,进入内容页面。

在开发环境中,一开始是用vite.config.ts 来做代理以及写一个插件来模拟API服务,为了快速测试

然而在生产环境中,vite并不适合做api服务器,需要用express,然后使用nginx做反向代理

一开始,dockerfile,是让nginx和express都在一个docker容器中,

编写dockerfile

但是要么就是nginx环境有问题,要么就是express有问题,

最后我想还是单一原则好了,一个docker一个服务,所以弄了两个docker,一个运行nginx,一个运行express

但是启动服务,fetch请求还是会502 Gateway错误,

这时候,有一个原因

因为nginx转发的的地址

1
2
    location /api/ {
        proxy_pass http://localhost:5001/;

而两个服务不在同一个docker,所以其实nginx转发的到localhost是在自己容器里面的localhost,所以express服务容器是接受不到

只要让两个docker在一个网络就可以了

1
2
3
    location /api/ {
    #using express  because docker run -d --name express xxx
        proxy_pass http://express:5001/;

docker run -d -network bridge -p 80:80 -p 443:443 nginx-service docker run -d --name express -network bridge -p 5001:5001 express-service

This post is licensed under CC BY 4.0 by the author.