さて、私はnginxを備えたAlpine Linux Dockerコンテナをセットアップしました
(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にもコピーされています)、同じエラーが発生します。
/run/nginx
ディレクトリが最新のAlpineコンテナに存在しません。
ディレクトリを作成するか、PIDファイルの場所を変更できます。
Dockerfileにディレクトリを作成します。
RUN mkdir -p /run/nginx
または、PIDファイルの場所を変更します。
nginx -g 'pid /tmp/nginx.pid;'
Docker Hubに公式のAlpine nginx Dockerイメージがある場合は、Alpineベースイメージから独自のnginx Dockerコンテナーを作成する必要はありません。
これがnginxアップストリームDockerイメージの Dockerfile です。
Dockerハブから直接プルするには、次を使用します。
$ docker pull nginx:Alpine
カスタム変数でDockerfileを変更し、独自のイメージを構築できます。
$ docker build -t nginx-Alpine
Alpine Linuxにはrun/nginx/nginx.pidがありません。これを先頭のnginx.confファイルに追加してみてください。
pid /run/nginx.pid;