在 docker 构建期间重新加载 Nginx

Reload Nginx in during docker build

我正在尝试在我的容器中安装 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: [error] open() "/run/nginx.pid" failed (2: No such file or directory)"。那是什么?

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

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

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

的组合

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

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

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

也就是说,我不建议 运行 在一个容器中包含多个服务。现在使用 docker-compose 编排多个容器已经很容易了。