我希望在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
文件,一切都工作得很完美。
NB:This Page isn't working
错误仅在我开始使用Dockerfile
时出现。
可能是什么问题?
1条答案
按热度按时间xlpyo6sf1#
当你运行docker容器时,你的端口重定向指向端口80,但它应该是nginx监听的端口8080: