Ich möchte eine vollständig dockered Drupal installieren. Mein erster Schritt besteht darin, Container mit Nginx und php5-fpm zu bekommen, die beide auf Debian basieren. Ich bin auf CoreOS Alpha-KanalDocker: Nginx und php5-fpm Docker sprechen nicht
Meine Dockerfiles sind die folgenden (mit Digital Ozean.):
Nginx:
FROM debian
MAINTAINER fvhemert
RUN apt-get update && apt-get install -y nginx && echo "\ndaemon off;" >> /etc/nginx/nginx.conf
CMD ["nginx"]
EXPOSE 80
Dieser Behälter bauen und läuft gut. Ich sehe die Standard-Nginx-Seite auf meiner Server-IP.
Php5-fpm:
FROM debian
MAINTAINER fvhemert
RUN apt-get update && apt-get install -y \
php5-fpm \
&& sed 's/;daemonize = yes/daemonize = no/' -i /etc/php5/fpm/php-fpm.conf
CMD ["php5-fpm"]
EXPOSE 9000
Dieser Behälter baut auch ohne Probleme und es hält beim Start ausgeführt wird.
Ich starte die php5-fpm Behälter zuerst mit:
docker run -d --name php5-fpm freek/php5-fpm:1
Ad dann fange ich Nginx ,, mit php5-fpm verbunden:
docker run -d -p 80:80 --link php5-fpm:phpserver --name nginx freek/nginx-php:1
Die Verknüpfung zu funktionieren scheint, eine gibt es Eintrag in/etc/hosts mit dem Namen phpserver. Beide Docker laufen:
[email protected] ~ $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd1a9ae0f1dd freek/nginx-php:4 "nginx" 38 minutes ago Up 38 minutes 0.0.0.0:80->80/tcp nginx
3bd12b3761b9 freek/php5-fpm:2 "php5-fpm" 38 minutes ago Up 38 minutes 9000/tcp php5-fpm
Ich habe einige der Konfigurationsdateien angepasst. Für die Nginx Container bearbeitet I/etc/nginx/sites-enabled/default und geändert:
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default_server ipv6only=on; ## listen for ipv6
root /usr/share/nginx/www;
index index.html index.htm index.php;
(ich die index.php hinzugefügt)
Und weiter:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
fastcgi_pass phpserver:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
In die php5-fpm docker I geändert /etc/php5/fpm/php.ini:
cgi.fix_pathinfo=0
php5-fpm läuft:
[21-Nov-2014 06:15:29] NOTICE: fpm is running, pid 1
[21-Nov-2014 06:15:29] NOTICE: ready to handle connections
ich auch index.html index.php geändert, es sieht aus wie dieser (/usr/share/nginx/www/index.php):
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
<?php
phpinfo();
?>
</body>
</html>
ich den 9000-Port gescannt haben aus Das Nginx-Andockfenster erscheint geschlossen. Keine gutes Zeichen natürlich:
[email protected]:/# nmap -p 9000 phpserver
Starting Nmap 6.00 (http://nmap.org) at 2014-11-21 06:49 UTC
Nmap scan report for phpserver (172.17.0.94)
Host is up (0.00022s latency).
PORT STATE SERVICE
9000/tcp closed cslistener
MAC Address: 02:42:AC:11:00:5E (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds
Die Nginx-Protokolle:
[email protected]:/# vim /var/log/nginx/error.log
2014/11/20 14:43:46 [error] 13#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 194.171.252.110, server: localhost, request: "GET/HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "128.199.60.95"
2014/11/21 06:15:51 [error] 9#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 145.15.244.119, server: localhost, request: "GET/HTTP/1.0", upstream: "fastcgi://172.17.0.94:9000", host: "128.199.60.95"
Ja, das geht schief und ich halte einen 502 falschen Gateway Fehler bekommen, wenn meine Nginx Instanz durchsuchen.
Meine Frage ist: Was genau schief geht? Meine Vermutung ist, dass mir einige Einstellungen in den PHP-Konfigurationsdateien fehlen.
EDIT FÜR WEITERE DETAILS: Dies ist das Ergebnis (aus dem Inneren des php5-fpm Behälter nach apt-get install net-tools):
[email protected]:/# netstat -tapen
Active Internet connections
(servers and established) Proto Recv-Q Send-Q Local Address
Foreign Address State User Inode PID/Program name
Aus dem Inneren des Nginx Behälter:
[email protected]:/# netstat -tapen
Active Internet connections
(servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:*
LISTEN 0 1875387 -
EDIT2: Progression!
Im php5-fpm Containern, in der Datei:
/etc/php5/fpm/pool.d/www.conf
ich von einem Socket-Namen, um das hört Argument geändert:
listen = 9000
Nun, wenn ich auf meine Webseite gehen bekomme ich das Fehler: "Keine Eingabedatei angegeben."
Wahrscheinlich habe ich irgendwo falsch/falsch. Ich werde genauer hinsehen!
EDIT3:
So habe ich die Docker mit den oben genannten Änderungen wieder aufzubauen und es scheint, dass sie reden. Allerdings sagt mir meine Webseite: "Datei nicht gefunden." Ich bin mir ziemlich sicher, dass es mit dem Dokument zu tun hat, dass nginx zu php-fpm sent, aber ich habe keine Ahnung, wie es aussehen soll. Ich benutzte die Standardeinstellungen, wenn ich die Socket-Methode verwendete, die immer funktionierte. Jetzt funktioniert es nicht mehr. Was sollte in/etc/nginx/sites-enabled/default unter location ~ .php $ {?
Hat es für Sie funktioniert, den Volumenbehälter zu trennen? – bdart