无法在 Alpine Linux(docker)中运行 nginx

无法在 Alpine Linux(docker)中运行 nginx

我已经在 alpine linux docker 容器中安装了 nginx

apk add nginx

现在我尝试运行 nginx。使用简单命令nginx将返回以下错误:

nginx: [emerg] open() "/run/nginx/nginx.pid" failed (2: No such file or directory)

是什么原因造成的? - 即使作为 root,我也没有权限打开,/run/所以我无法真正检查出来。我的 nginx.conf 是:

#
events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    #include /etc/nginx/mime.types;
    #default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    ##
    # Virtual Host Configs
    ##

    #include /etc/nginx/conf.d/*.conf;
    #include /etc/nginx/sites-enabled/*;
}

当然没有包含服务器,但我希望它能够运行并且从不提供任何东西。 - 但即使我启用了包含(它将默认 html 重定向到页面,我也将其复制到 docker 中)也会出现同样的错误。

答案1

/run/nginx最新的 Alpine 容器上不存在该目录。

您可以创建目录或更改 PID 文件位置。

在 Dockerfile 中创建目录:

RUN mkdir -p /run/nginx

或者更改PID文件的位置:

nginx -g 'pid /tmp/nginx.pid;'

答案2

当 Docker Hub 上有官方的 Alpine nginx docker 镜像时,实际上没有必要从 alpine 基础镜像创建自己的 nginx docker 容器。

这里有一个Dockerfilenginx 上游 docker 镜像。

要直接从 Docker hub 拉取它,请使用:

$ docker pull nginx:alpine

您可以使用自定义变量修改其 Dockerfile 并构建自己的图像。

$ docker build -t nginx-alpine

答案3

Alpine linux 没有 run/nginx/nginx.pid。请尝试在顶部 nginx.conf 文件中添加它。

pid /运行/nginx.pid;

相关内容