使用nginx启动Docker容器时出现页面不工作错误

kgsdhlau  于 2022-11-21  发布在  Nginx
关注(0)|答案(1)|浏览(122)

我希望在Cloud Run中的一个节点进程中部署Express服务器+ GRPC服务器。
根据我收集的建议,实现这一点的方法是使用nginx。
所以我有我的docker文件如下:

停靠文件

# Build environment
FROM node:16.14.2
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . ./

# server environment
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/configfile.template
ENV HOST 0.0.0.0
ENV NODE_ENV production
EXPOSE 8080

RUN printf '%s\n' >cmd.sh \
    "envsubst '\$PORT' < /etc/nginx/conf.d/configfile.template > /etc/nginx/conf.d/default.conf &&" \
    "nginx -g 'daemon off;' &&" \
    "node server.js"
    
CMD ["sh", "cmd.sh"]

那么我的nginx.conf文件如下:

upstream grpc-server {
       server 0.0.0.0:4000;
   }

   upstream express-server{
       server 0.0.0.0:3000;
   }

   server {

    # listen       $PORT;
    listen         8080;
    server_name    user-service;

    location / {
      root public;
      index index.html;
    }

    location /user {
        grpc_pass  grpc://grpc-server;
    }

    location /v1 {
        proxy_pass http://express-server;
    }
    
  }

但是,每当我使用docker run -p 8080:80 user-service启动我的Docker容器时,我总是得到以下日志

2022/11/12 21:25:38 [notice] 9#9: using the "epoll" event method
2022/11/12 21:25:38 [notice] 9#9: nginx/1.23.2
2022/11/12 21:25:38 [notice] 9#9: built by gcc 11.2.1 20220219 (Alpine 11.2.1_git20220219) 
2022/11/12 21:25:38 [notice] 9#9: OS: Linux 5.10.104-linuxkit
2022/11/12 21:25:38 [notice] 9#9: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/11/12 21:25:38 [notice] 9#9: start worker processes
2022/11/12 21:25:38 [notice] 9#9: start worker process 10
2022/11/12 21:25:38 [notice] 9#9: start worker process 11
2022/11/12 21:25:38 [notice] 9#9: start worker process 12
2022/11/12 21:25:38 [notice] 9#9: start worker process 13

现在,当我访问http://localhost:8080时,经常会看到:
此页面无法使用
localhost未发送任何数据。
错误_空_响应
然而,如果我删除上面的Dockerfile,并使用我本地安装的nginx服务器和上面的nginx.conf文件,一切都工作得很完美。

NBThis Page isn't working错误仅在我开始使用Dockerfile时出现。

可能是什么问题?

xlpyo6sf

xlpyo6sf1#

当你运行docker容器时,你的端口重定向指向端口80,但它应该是nginx监听的端口8080:

docker run -p 8080:8080 user-service

相关问题