docker - 在 docker 构建期间重新加载 Nginx

标签 docker nginx alpine-linux

我正在尝试在我的容器中安装 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”失败(2:没有这样的文件或目录)”。那是什么?

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

最佳答案

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

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

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

也就是说,我不建议在单个容器中运行多个服务。如今,使用 docker-compose 编排多个容器非常容易。

关于docker - 在 docker 构建期间重新加载 Nginx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51466356/

相关文章:

python - 导入错误 : The _imagingft C module is not installed in alpine-docker

docker - Netflix/Conductor 打印了太多与 dynomite 相关的日志

docker - 来自守护程序 : Get https://quay. io/v2/的错误响应:未授权:未授权访问请求的资源

docker - 使用 SSL 的 Nginx 子域重定向不起作用

azure - 在aks中部署nginx-ingress,没有rbac问题

docker - 无法在 alpine linux 上使用 openjdk 8 初始化类 sun.awt.X11FontManager

django - Docker 撰写 nginx 配置设置以在端口 8000 上广播

python - FastAPI WebSocket无法处理大量数据输入?

python - 在没有 Web 服务器的情况下将 Python 脚本运行到 Docker 中?

Nginx 的 "reuseport"用于相同的 IP :PORT pair on different virtual hosts