J'ai une simple config docker-compose avec php-fpm et nginx, et je ne vois aucun fichier php. Quand je vais à localhost, il affiche le fichier non trouvé.
J'ai essayé tout ce que je pouvais trouver sur le net, mais tout ce que j'ai essayé a échoué. Cela fonctionne très bien pour le HTML, mais pas pour les fichiers php. Semble être un problème de chemin, ou quelque chose comme ça.
Je tombe sur cette erreur quand je docker-compose logs
:
project3-php_1 | 172.17.0.5 - 29/Mar/2016:13:29:12 +0000 "GET /index.php" 404
project3-front_1 | 172.17.0.1 - - [29/Mar/2016:13:29:12 +0000] "GET / HTTP/1.1" 404 27 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
project3-front_1 | 2016/03/29 13:29:12 [error] 8#8: *3 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.17.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://172.17.0.2:9000", Host: "localhost"
Voici mon docker-compose:
project3-front:
image: nginx
ports:
- "80:80"
links:
- "project3-php:project3-php"
volumes:
- ".:/home/docker"
- "./nginxdir/default.conf:/etc/nginx/conf.d/default.conf"
- "./html:/usr/share/nginx/html"
project3-php:
build: phpdir
volumes:
- ".:/home/docker:rw"
- "./html:/var/www/html"
ports:
- "9000:9000"
working_dir: "/home/docker"
Ensuite, mon fichier docker pour php:
FROM php:5.6-fpm
EXPOSE 9000
mon default.conf pour nginx:
server {
listen 80;
server_name localhost;
index index.php index.html;
error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log;
root /usr/share/nginx/html;
location ~ \.php$ {
fastcgi_pass project3-php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
pwd du dossier principal est:
/media/revenge/share/PROJECTS/docker_images/php7-nginx
La hiérarchie des fichiers est la suivante:
├── docker-compose.yml
├── html
│ ├── index.php
├── nginxdir
│ ├── default.conf
├── phpdir
│ ├── dockerfile
│ └── php.ini
Le dossier entier est chmod 777
Toute idée serait grandement appréciée. Je suis sûr qu'il y a quelque chose que je n'ai pas eu. Merci d'avance.
command
personnalisé, par exemple:docker-compose.yml
web:
image: nginx
volumes:
- "~/www/project:/var/www"
- "~/www/project/vhost.conf:/etc/nginx/conf.d/site.conf"
# Add this row:
command: [nginx-debug, '-g', 'daemon off;']
site.conf
" (dans cet exemple, c'est le fichier ~/www/project/vhost.conf
) Activez le mode débogage avec le error_log
(ajoutez le mot "debug" à la fin):error_log "/var/log/nginx/error.log" debug;
docker-compose stop web
docker-compose up -d web
docker-compose ps
/var/log/nginx/error.log
.Le problème dans la plupart des cas
Vous n'avez pas encore défini ou vous utilisez une structure de répertoires différente dans "web" et "php-fpm". Si vous souhaitez utiliser une structure différente de celle que vous avez définie, définissez la "structure fpm" à l'emplacement fastcgi_param SCRIPT_FILENAME
, comme suit:
docker-compose.yml
phpfpm:
image: php:fpm
volumes:
- "~/www/project:/var/www/html/user/project"
"site.conf"
fastcgi_param SCRIPT_FILENAME /var/www/html/user/project$fastcgi_script_name;
Enfin trouvé le:
Il me manquait cette ligne dans le volume de la section PHP de docker-compose:
"./html:/usr/share/nginx/html"
voici à quoi devrait ressembler le docker-compose:
project3-front:
image: nginx
ports:
- "80:80"
links:
- "project3-php:project3-php"
volumes:
- ".:/home/docker"
- "./nginxdir/default.conf:/etc/nginx/conf.d/default.conf"
- "./html:/usr/share/nginx/html"
project3-php:
build: phpdir
volumes:
- ".:/home/docker:rw"
- "./html:/var/www/html"
ports:
- "9000:9000"
working_dir: "/home/docker"
La racine absolue (ici "/ usr/share/nginx/html") du fichier nginx default.conf devait également être définie dans la partie php de docker-compose (elle était sous nginx auparavant)
C'est un soulagement ;)
Dans mon cas, les volumes: de php et nginx pointaient dans le bon répertoire (et donc le même). Mais dans ma configuration nginx, il y avait un NGINX_SERVER_ROOT: indiquant le mauvais sens.
Veillez donc à bien vérifier tous les volumes et les paramètres du répertoire racine. Certains sont faciles à négliger.
Hier un résultat de Docker Update in - qui a été installé. Le problème en fonction de cette mise à jour est que le réseau (vEthernet (DockerNAT))} _ a été modifié. De cette façon, mon pare-feu (dans mon cas, Kaspersky) a réinitialisé mon pare-feu de réseau sur "public" au lieu de "fiable".
J'ai compris cela en ouvrant " Docker -> Paramètres -> Périphériques partagés ". Au premier regard, tout semble aller bien. Il y avait une "coche" sur chaque appareil que je devais partager. Ensuite, j'ai essayé de désactiver et d'activer à nouveau mes périphériques partagés. En activant à nouveau mon périphérique partagé, l'erreur par défaut "Un pare-feu bloque le partage de fichiers entre Windows et les conteneurs. Voir la documentation pour plus d'informations." est venu. -> PARFAIT !! . Le périphérique partagé ne peut plus accéder aux fichiers, mais Docker persiste dans l'état où tout va bien.
Je pourrais donc le réparer en:
docker-compose up
et tout se passe comme un charme. Mes fichiers pourraient être consultés à nouveau.