4

I am trying to setup a docker container for php-fpm. But encountering this error when visiting the web directory configured on localhost. I have been stuck here for over 5 hours. Here is my Dockerfile:

FROM centos:latest WORKDIR /tmp RUN yum -y update RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm; rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm #RUN yum -y groupinstall "Development Tools" RUN systemctl stop firewalld; systemctl disable firewalld RUN yum -y install php56w php56w-opcache php56w-cli php56w-common php56w-devel php56w-fpm php56w-gd php56w-mbstring php56w-mcrypt php56w-pdo php56w-mysqlnd php56w-pecl-xdebug php56w-pecl-memcache RUN sed -i "s/;date.timezone =.*/date.timezone = UTC/" /etc/php.ini && \ sed -i "s/display_errors = Off/display_errors = stderr/" /etc/php.ini && \ sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 30M/" /etc/php.ini && \ sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php-fpm.conf && \ sed -i '/^listen = /c listen = 9000' /etc/php-fpm.d/www.conf && \ sed -i '/^listen.allowed_clients/c ;listen.allowed_clients =' /etc/php-fpm.d/www.conf RUN mkdir -p /home/www VOLUME ["/home/www"] EXPOSE 9000 ENTRYPOINT ["/usr/sbin/php-fpm", "-F"] 

Check by docker ps

aab4f8ce0fe8 jason/fpm:v1 "/usr/sbin/php-fpm - 6 minutes ago Up 6 minutes 0.0.0.0:9002->9000/tcp fpm 

The data volume does exist. check by docker inspect

"Volumes": { "/home/www": "/home/www" }, "VolumesRW": { "/home/www": true } "Ports": { "9000/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "9002" } ] } 

localhost nginx website config:

listen 80; server_name admin.local.lumen.com; index index.php index.html index.htm ; root /home/www/lumenback/public_admin; error_log /home/wwwlogs/lumenback_error.log; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .*\.php?$ { fastcgi_pass 127.0.0.1:9002; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; #include fastcgi.conf; } 

Error logged by php-fpm:

[error] 5322#0: *3798 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.16.1.19, server: admin.local.lumen.com, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9002", host: "admin.local.lumen.com" 

Many people online said the error is caused by fastcgi_param SCRIPT_FILENAME. Seems it is not the reason in my case.

5
  • it seems this error is related to something wrong in SCRIPT_FILENAME, can you docker exec -it aab4f8ce0fe8 echo $SCRIPT_FILENAME and paste it? Commented May 20, 2015 at 11:20
  • @user2915097 It prints nothing. I think $SCRIPT_FILENAME is not an env variable Commented May 20, 2015 at 12:48
  • Have you tried include fastcgi_params first then set SCRIPT_FILENAME? Commented May 21, 2015 at 1:21
  • Maybe you should check permissions. Try to change all php files to world readable and try again Commented May 21, 2015 at 1:33
  • @xuhdev Thanks. I changed data volume to a different directory with permission 755 and put fastcgi_params before SCRIPT_FILENAME. Now it works. Then I changed fastcgi_params back, still works. I guess the reason is the incorrect permission. Commented May 21, 2015 at 2:09

1 Answer 1

1

You may have got an incorrect file permission -- the process in the container cannot read php files. You can either change the php files readable by the user running php-fpm in the container. Note that the user name in the container differs from the names on the host, so specifying user ID is probably a better way (or simply make them world readable).

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.