我已经在 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;