Help: docker started nginx mime.types and fastcgi_params to report an error

  docker, question

Question:

  1. Mime.types reported an error when docker started nginx
  2. Include fastcgi_params in the site configuration also reported an error.

1. mime.types error correlation

Nginx container error log:

2018/09/25 13:27:27 [emerg] 1#1: open() "/etc/nginx/mime.types" failed (2: No such file or directory) in /etc/nginx/nginx.conf:14
 nginx: [emerg] open() "/etc/nginx/mime.types" failed (2: No such file or directory) in /etc/nginx/nginx.conf:14

Nginx.conf documents are as follows

user  nginx;
 worker_processes  1;
 
 error_log  /var/log/nginx/error.log warn;
 pid        /var/run/nginx.pid;
 
 
 events {
 worker_connections  1024;
 }
 
 
 http {
 include         mime.types;
 default_type    application/octet-stream;
 
 log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" "$http_x_forwarded_for"';
 
 # access_log  logs/access.log  main;
 
 sendfile        on;
 #tcp_nopush     on;
 #keepalive_timeout  0;
 keepalive_timeout  65;
 
 #gzip  on;
 
 server {
 # listen       8080;
 # server_name  localhost;
 
 #charset koi8-r;
 
 #access_log  logs/host.access.log  main;
 
 # location / {
 #     root   html;
 #     index   index.html  index.htm ;
 # }
 
 #error_page  404              /404.html;
 
 # redirect server error pages to the static page /50x.html
 #
 # error_page   500 502 503 504  /50x.html;
 # location = /50x.html {
 #     root   html;
 # }
 
 # proxy the PHP scripts to Apache listening on 127.0.0.1:80
 #
 #location ~ \.php$ {
 #    proxy_pass   http://127.0.0.1;
 #}
 
 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 #location ~ \.php$ {
 #    root           html;
 #    fastcgi_pass   127.0.0.1:9000;
 #    fastcgi_index   index.php ;
 #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 #    include        fastcgi_params;
 #}
 
 # deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 #location ~ /\.ht {
 #    deny  all;
 #}
 }
 
 # HTTPS server
 #
 #server {
 #    listen       443 ssl;
 #    server_name  localhost;
 
 #    ssl_certificate      cert.pem;
 #    ssl_certificate_key  cert.key;
 
 #    ssl_session_cache    shared:SSL:1m;
 #    ssl_session_timeout  5m;
 
 #    ssl_ciphers  HIGH:!  aNULL:!  MD5;
 #    ssl_prefer_server_ciphers  on;
 
 #    location / {
 #        root   html;
 #        index   index.html  index.htm ;
 #    }
 #}
 include ./conf.d/*;
 }

2. include fastcgi_params error correlation

Nginx container error content

nginx: [emerg] open() "/etc/nginx/fastcgi_params" failed (2: No such file or directory) in /etc/nginx/./conf.d/www.php.cc.conf:23

Www.php.cc.conf configuration content

server {
 listen    80;
 server_name    www.php.cc;
 root    /etc/www/php;
 
 location / {
 index     index.html  index.php  index.htm ;
 }
 # Configuration of Error Pages
 error_page 404 /error.html;
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root html;
 }
 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 location ~ \.php$ {
 fastcgi_pass 172.17.0.3:9000;
 fastcgi_index  index.php ;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }
 location ~ /\.ht {
 deny all;
 }
 }

First check your mounting configuration. Sometimes some friends like to mount the entire nginx configuration directory into /etc/nginx. However, you only added nginx.conf to this directory, but there are many other files under the /etc/nginx directory in the container. If you mount the entire directory directly, the other files will disappear with the mounting of the directory, and there will be problems with the natural reading configuration.

There are two ways to solve this problem:

  1. Change the directory mount to file mount, and only mount nginx.conf, that is-v ~/nginx/nginx.conf:/etc/nginx/nginx.conf.
  2. It is to copy other contents in the /etc/nginx directory in the container to the directory to be mounted, and mount it together with the directory.