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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.