在Docker容器中重新加载Nginx

时间:2018-07-22 15:00:36

标签: docker nginx

我正在尝试在容器中安装Nginx(然后是nodejs)。我在nginx /文件夹中有自己的nginx配置文件:

# --- Release with Alpine ----
FROM phusion/baseimage:0.10.1

# Create app directory
WORKDIR /app

RUN apt-get update \
    && apt-get -y install nginx

RUN ls /etc/nginx
COPY nginx/nginx.conf /etc/nginx/nginx.conf
RUN ls /etc/nginx

RUN ls /etc/nginx/sites-enabled
RUN rm /etc/nginx/sites-enabled/default
COPY nginx/serverlogic /etc/nginx/sites-enabled/serverlogic
RUN ls /etc/nginx/sites-enabled

RUN nginx -s reload

RUN echo "$PWD FINALFINALFINAL" && ls

EXPOSE 8080

但是我在RUN nginx -s reload行上收到一条错误消息:“ nginx:[错误] open()“ /run/nginx.pid”失败(2:没有这样的文件或目录)”。那是什么?

p.s。在安装了ubuntu,node.js和nginx的docker hub上是否有一些映像?为了简单起见,我想将它们放在一个容器中。

2 个答案:

答案 0 :(得分:6)

nginx -s reload仅在nginx运行时才能使用。它向nginx的主进程发送信号,该信号本身会通知工作进程。

这里的问题是,在构建过程中没有运行nginx实例。因此您无法重新加载它。

这不是一个真正的问题。由于nginx没有运行,因此不需要重新加载它。启动nginx(使用phusion基本映像时使用runit初始化文件)后,它将加载您提供的配置。

也就是说,我不建议您在单个容器中运行多个服务。如今,使用docker-compose轻松协调多个容器。

答案 1 :(得分:1)

您可以使用 https://github.com/smebberson/docker-ubuntu-base/tree/master/nginx-nodejs

在同一容器中同时使用Nginx和Node.js的图像。这是[smebberson / nginx] [smebbersonnginx]和smebberson / nodejs的组合。