Inhaltsverzeichnis
Docker mit NGINX, PHP-FPM und rsyslog
Weiterführende Links:
Stdout to syslog:
sudo docker run \ --log-driver syslog \ --log-opt syslog-address=tcp://syslog-host:1514 \ --log-opt syslog-format=rfc5424micro \ -d --name php \ -v /home/urs/docker-www:/usr/share/nginx/html \ -v /dev/log:/dev/log \ php:fpm-alpine
Der Skript Pfad muss in beiden Container identisch sein (vgl. -v option)
Reload NGINX aus Container:
kill -s HUP 1
Reload PHP-FPM aus Container:
kill -s USR2 1
NGINX Konfig
- default.conf
location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 172.17.0.3:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
Für fasctcgi_pass muss die IP des php containers angegeben sein, wenn sie nicht über docker compose im gleichen Netz sind (fehlende DNS).
PHP-FPM Konfig
- /usr/local/etc/php-fpm.conf
error_log=syslog
rsyslog Konfig
Ohne spezielle Anpassung werden aus einem Container weitergeleitete Log-Nachrichten über den unix-socket /dev/log mit dem Namen des Docker Hosts geloggt. Um dies zu umgehen muss ein dedizierter Socket eingerichtet werden. Mittels „HostName“ Parameter kann der Hostname für diesen Socket definiert werden.
- /etc/rsyslog.d/10-docker.conf
input(type="imuxsock" HostName="docker" Socket="/dev/log-docker")
https://www.rsyslog.com/doc/configuration/modules/imuxsock.html#read-log-data-from-jails
Die Container müssen nach Neustart von rsyslog ebenfalls neu gestartet werden, da der Socket sonst ins leere läuft.
