Solución:
Si usa Docker Compose, puede agregar esta línea a su docker-compose.yaml expediente:
command: ["postgres", "-c", "log_statement=all"]
y todas sus consultas se escribirán en el archivo de registro del contenedor.
Configuración log_destination
para stderr
me hizo el truco sin crear una nueva imagen:
version: "2.2"
services:
db:
image: postgres:12-alpine
command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
Y luego pude rastrear las declaraciones usando docker-compose logs -f db
.
También debería funcionar con otras versiones, pero solo lo probé con postgres:12-alpine
.
Consulte esto, debe habilitar logging_collector
, entonces puedes ver las consultas entrantes en log_directory
‘s log_filename
.
Y para habilitarlo en docker logs
, tuviste que hacer algún truco para hacerlo, una solución es la siguiente:
wrapper.sh:
#!/usr/bin/env bash
mkdir /logs
touch /logs/postgresql.log
chmod -R 777 /logs
tail -f /logs/* &
/docker-entrypoint.sh "[email protected]"
Arriba usará tail
para supervisar /logs/postgresql.log
que luego será utilizado por postgresql
‘s logging_collector
y muéstralo docker logs
.
Dockerfile:
FROM postgres:11.1-alpine
COPY wrapper.sh /
RUN chmod +x /wrapper.sh
ENTRYPOINT ["/wrapper.sh"]
CMD ["postgres", "-c", "logging_collector=on", "-c", "log_directory=/logs", "-c", "log_filename=postgresql.log", "-c", "log_statement=all"]
Arriba se utilizará personalizar wrapper.sh
, primero monitoreará el registro de postgre, lo imprimirá y luego continuará para ejecutar el registro predeterminado docker-entrypoint.sh
para iniciar el servidor postgresql.
Después del inicio del contenedor, muestre los registros antes de las consultas entrantes:
[email protected]:~/abc$ docker build -t abc:1 .
[email protected]:~/abc$ docker run -idt abc:1
[email protected]:~/abc$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9112eb785e5 abc:1 "/wrapper.sh postgre…" 2 seconds ago Up 1 second 5432/tcp loving_joliot
[email protected]:~/abc$ docker logs loving_joliot
The files belonging to this database system will be owned by user "postgres".
......
2019-07-13 03:38:14.030 UTC [46] LOG: database system was shut down at 2019-07-13 03:38:13 UTC
2019-07-13 03:38:14.034 UTC [10] LOG: database system is ready to accept connections
Simule algunas consultas entrantes y vuelva a ver los registros:
[email protected]:~/abc$ docker exec -it -u postgres loving_joliot psql -c "SELECT datname FROM pg_database;"
datname
-----------
postgres
template1
template0
(3 rows)
[email protected]:~/abc$ docker logs loving_joliot
The files belonging to this database system will be owned by user "postgres".
......
2019-07-13 03:38:14.030 UTC [46] LOG: database system was shut down at 2019-07-13 03:38:13 UTC
2019-07-13 03:38:14.034 UTC [10] LOG: database system is ready to accept connections
2019-07-13 03:41:22.859 UTC [62] LOG: statement: SELECT datname FROM pg_database;
Puede ver arriba simulamos una ejecución SQL SELECT datname FROM pg_database;
, y en docker logs
ya pudimos ver este sql.