I am in the process of Dockerising my webserver/php workflow.
But because I am on Windows, I need to use a virtual machine. I chose boot2docker which is a Tiny Core Linux running in Virtualbox and adapted for Docker.
I selected three containers:
- nginx: the official nginx container;
- jprjr/php-fpm: a php-fpm container;
- mysql: for databases.
In boot2docker, /www/ contains my web projects and conf/, which has the following tree:
conf │ ├───fig │ fig.yml │ └───nginx nginx.conf servers-global.conf servers.conf Because docker-compose is not available for boot2docker, I must use fig to automate everything. Here is my fig.xml:
mysql: image: mysql environment: - MYSQL_ROOT_PASSWORD=root ports: - 3306:3306 php: image: jprjr/php-fpm links: - mysql:mysql volumes: - /www:/srv/http:ro ports: - 9000:9000 nginx: image: nginx links: - php:php volumes: - /www:/www:ro ports: - 80:80 command: nginx -c /www/conf/nginx/nginx.conf Here is my nginx.conf:
daemon off; user nginx; worker_processes 1; error_log /var/log/nginx/error.log debug; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile off; keepalive_timeout 65; index index.php index.html index.htm; include /www/conf/nginx/servers.conf; autoindex on; } And the servers.conf:
server { server_name lab.dev; root /www/lab/; include /www/conf/nginx/servers-global.conf; } # Some other servers (vhosts) And the servers-global.conf:
listen 80; location ~* \.php$ { fastcgi_index index.php; fastcgi_pass php:9000; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /srv/http$fastcgi_script_name; } So the problem now (sorry for all that configuration, I believe it was needed to clearly explain the problem): If I access lab.dev, no problem (which shows that the host is created in Windows) but if I try to access lab.dev/test_autoload/, I have a File not found.. I know this comes from php-fpm not being able to access the files, and the nginx logs confirm this:
nginx_1 | 2015/05/28 14:56:02 [error] 5#5: *3 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.59.3, server: lab.dev, request: "GET /test_autoload/ HTTP/1.1", upstream: "fastcgi://172.17.0.120:9000", host: "lab.dev", referrer: "http://lab.dev/" I know that there is a index.php in lab/test_autoload/ in both containers, I have checked. In nginx, it is located in /www/lab/test_autoload/index.php and /srv/http/lab/test_autoload/index.php in php.
I believe the problem comes from root and/or fastcgi_param SCRIPT_FILENAME, but I do not know how to solve it.
I have tried many things, such as modifying the roots, using a rewrite rule, adding/removing some /s, etc, but nothing has made it change.
Again, sorry for all this config, but I think it was needed to describe the environment I am in.