我尝试在基于phusion/passenger-docker的docker容器中运行一个next.js应用程序。
我有什么,我认为是一个完整的设置基于乘客码头文档,但我得到了一个404页从nginx。
Docker日志转储显示乘客或nginx正在查找index.html
[error] 48#48: *1 "/home/app/nhe_app/index.html" is not found
我的启动文件是/home/app/nhe_app/server.js
Dockerfile最后阶段:
# Build production container from builder stage
FROM phusion/passenger-nodejs:1.0.8
# Set correct environment variables.
ENV HOME /root
ENV NODE_ENV=production
# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]
# Enable Nginx and Passenger
RUN rm -f /etc/service/nginx/down
WORKDIR /home/app/nhe_app
RUN rm /etc/nginx/sites-enabled/default
COPY --chown=app:app ./nhe_app.conf /etc/nginx/sites-enabled/nhe_app.conf
COPY --chown=app:app ./secret_key.conf /etc/nginx/main.d/secret_key.conf
COPY --chown=app:app ./gzip_max.conf /etc/nginx/conf.d/gzip_max.conf
COPY --chown=app:app --from=builder /app/server.js /app/.env /home/app/nhe_app/
COPY --chown=app:app --from=builder app/src /home/app/nhe_app/src
COPY --chown=app:app --from=builder app/node_modules /home/app/nhe_app/node_modules
# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
nginx配置- nhe_app.conf:
server {
listen 80;
server_name glen-mac.local;
root /home/app/nhe_app/server.js;
passenger_enabled on;
passenger_user app;
passenger_startup_file server.js;
}
我希望Passenger会启动nginx并运行我应用程序。
当我构建并启动Docker容器时,它似乎期望index.html
。
我正在用docker image build -t nhe_app .
构建docker容器
使用docker container run --name nhe_app -p 80:3000 nhe_app
运行它
浏览http://glen-mac.local/
会显示nginx的格式化404页面。
如何配置passenger-docker来查找和执行我的server.js
而不是index.html
?
2条答案
按热度按时间bvk5enib1#
OP问题中有几个微妙的问题。
最值得注意的是,Passenger似乎要求应用根路径(在上面的nginx配置中由
root
定义)有一个名为public
的顶级文件夹。该文件夹不能包含index.html
文件,并且可能应该为空。这在示例中显示,但在文档中没有明确说明为硬要求。第二个主要错误是Passenger绕过了应用的
server.js
中指定的端口(本例中为3000),并将其替换为nginx配置中指定的端口。docker容器运行--名称nhe_app -p 80:3000 nhe_app
至
Docker容器运行-名称nhe_app -p 80:80 nhe_app.
否则,我能给予出的最好建议是:
1.通过本地安装(没有Docker)学习Passenger basics。让Passenger演示应用程序工作。
1.让您的应用程序在本地Passenger安装中运行。
1.应用你所学到的在passenger-docker中实现你的应用。
kmbjn2e32#
服务器{ listen 7063;
}