Open peterschristoph opened 1 year ago
Having the same issue. Haven't found a solution atm.
Running 8.2-php-fpm in K8S, neither /proc/self/fd/2
nor /proc/1/fd/2
work for me.
I'm also having this issue, with the 8.2-fpm-alpine3.18 images.
Dockerfile writes the error_log directive to /usr/local/etc/php-fpm.d/docker.conf
.
However, phpinfo
reveals that that file isn't parsed.
I think it's normal that only /proc/1/fd/2
works because it's the output of process number 1. Using self
would refer to another process when running it from a shell.
Maybe this part of the Dockerfile is relevant:
https://github.com/docker-library/php/blob/master/8.3/bookworm/fpm/Dockerfile#L271-L272
For anyone who wants to log to kubernetes stdout:
As stupid as it may look putting the php-fpm
command in a bash script from a docker file logs properly:
RUN touch /start.sh
RUN echo "#!/bin/bash" >> /start.sh
RUN echo "php-fpm" >> /start.sh
...
CMD ["/bin/bash", "/start.sh"]
EDIT: As suggested by @yosifkit not recommended
CMD ["/bin/bash", "-c", "tail -f /var/logs/some/error.log & php-fpm"]
# tail => Utility for displaying the last part of files.
# -f => Keep the file open after reaching the end and continuously monitors the file, output new content to stdout.
Sry, but found this issue when searching for that problem...
CMD ["/bin/bash", "-c", "tail -f /var/logs/some/error.log & php-fpm"]
I would strongly suggest caution before using this. This leaves bash
as a resident process and so any signal (like SIGINT
/SIGHUP
) would be sent to bash (and ignored, since it is PID 1) and not to the PHP process. So, stopping the container would not work without SIGKILL
(or manually signaling the PHP process inside the container).
@yosifkit Hey, thanks for your feedback, just a few questions regarding that...
So, docker stop
or stopping the container via Docker desktop would not work, right? (We had to use kill
)
Just tested this using the image with tail -f /var/logs/some/error.log
as a kubernetes container image, and it seems at least kubernetes does not have problem replacing the pod when the resource gets updated.
Do you know any other problems that might occur using that workaround in kubernetes?
I found another working solution:
RUN touch /start.sh
RUN echo "#!/bin/bash" >> /start.sh
RUN echo "php-fpm" >> /start.sh
...
CMD ["/bin/bash", "/start.sh"]
@yosifkit Do you see any issues with that?
hi, after some time i am convinced that there is a bug in php:8.2-fpm image or in connection with docker swarm or in docker?
When using the php:8.2-fpm image, this repo writes a docker config which redirects the access and error log to the proc self fd 2. Unfortunately all logs that should end up in the docker logs are lost.
Environment
further information
Inside docker container:
I'm not the only one with this behavior, for example: https://github.com/docker-library/php/issues/878#issuecomment-1345275524