Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set up docker-compose with nginx missing snippets/fastcgi-php.conf

I am trying to set up a new docker-compose file.

version: '3'
services:

  webserver:
      image: nginx:latest
      container_name: redux-webserver
      # working_dir: /application
      volumes:
        - ./www:/var/www/
        - ./docker/nginx/site.conf:/etc/nginx/conf.d/default.conf
      ports:
        - "7007:80"

Currently it is very simple. But I copy the following config:

# Default server configuration
#
server {
   listen 7007 default_server;
   listen [::]:7007 default_server;


   root /var/www;

   # Add index.php to the list if you are using PHP
   index index.html index.htm index.nginx-debian.html;

   server_name example;

   location / {
      # First attempt to serve request as file, then
      # as directory, then fall back to displaying a 404.
      try_files $uri $uri/=404;
   }

    location /redux {
        alias /var/www/Redux/src;
        try_files $uri @redux;

        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
    }

    location @redux {
        rewrite /redux/(.*)$ /redux/index.php?/$1 last;
    }

   # pass PHP scripts to FastCGI server
   #
   location ~ \.php$ {
      include snippets/fastcgi-php.conf;

        #fastcgi_split_path_info ^(.+\.php)(/.+)$;

      # With php-fpm (or other unix sockets):
      fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        #fastcgi_index index.php;
      # With php-cgi (or other tcp sockets):
      # fastcgi_pass 127.0.0.1:9000;
   }

   # deny access to .htaccess files, if Apache's document root
   # concurs with nginx's one
   #
   location ~ /\.ht {
      deny all;
   }
}

But now when I try to start it with docker-compose run webserver I get the following error:

2019/07/20 08:55:09 [emerg] 1#1: open() "/etc/nginx/snippets/fastcgi-php.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/default.conf:59
nginx: [emerg] open() "/etc/nginx/snippets/fastcgi-php.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/default.conf:59

I understand it does not find the file fastcgi-php.conf. But why is this? Shouldn't that file be included in the standart nginx installation?

like image 262
Pascal Avatar asked Oct 20 '25 12:10

Pascal


2 Answers

/etc/nginx/snippets/fastcgi-php.conf is in nginx-full package, but the image nginx:latest you used did not install nginx-full package.

To have it, you need to write your own dockerfile base from nginx:latest & install nginx-full in it:

Dockerfile:

FROM nginx:latest
RUN apt-get update && apt-get install -y nginx-full

docker-compose.yaml:

version: '3'
services:
  webserver:
    build: .
    image: mynginx:latest

Put Dockerfile & docker-compose.yaml in the same folder then up it.

Additional, if you do not mind use other folk's repo(means not official), you can just search one from dockerhub, e.g. one I find from dockerhub (schleyk/nginx-full):

docker run -it --rm schleyk/nginx-full ls -alh /etc/nginx/snippets/fastcgi-php.conf
-rw-r--r-- 1 root root 422 Apr  6  2018 /etc/nginx/snippets/fastcgi-php.conf
like image 157
atline Avatar answered Oct 22 '25 03:10

atline


You are trying to use a docker compose config that does not account for your trying to load fastcgi / php specific options.

You can use another image and link it to your web server like:

  volumes:
        - ./code:/code
        - ./site.conf:/etc/nginx/conf.d/site.conf
    links:
        - php
php:
    image: php:7-fpm
    volumes:
        - ./code:/code

Source, with a more thorough explanation: http://geekyplatypus.com/dockerise-your-php-application-with-nginx-and-php7-fpm/

like image 38
Jonathan M. Hethey Avatar answered Oct 22 '25 01:10

Jonathan M. Hethey



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!