Problema de creación de base de datos en Symfony Docker con PostgreSQL.
Cuando intento crear la base de datos con el comando:
symfony console doctrine:database:create
Obtengo este error:
SQLSTATE[08006] [7] FATAL: no se pudo abrir el archivo “global/pg_filenode.map”: Permiso denegado
Estoy intentando crear una base de datos en un contenedor de Docker de PostgreSQL.
Gracias por tu ayuda.
docker-compose.yml:
version: ‘3’
services:
###> doctrine/doctrine-bundle ###
database:
image: postgres:${POSTGRES_VERSION:-13}-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB:-app}
# Definitivamente debes cambiar la contraseña en producción
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-CambiaMe}
POSTGRES_USER: ${POSTGRES_USER:-symfony}
volumes:
– db-data:/var/lib/postgresql/data:rw
# Puedes utilizar un directorio de host enlazado en su lugar, ¡para que sea más difícil eliminar accidentalmente el volumen y perder todos tus datos!
# – ./docker/db/data:/var/lib/postgresql/data:rw
###< doctrine/doctrine-bundle ###
volumes:
###> doctrine/doctrine-bundle ###
db-data:
###< doctrine/doctrine-bundle ###
davy.ai
El error que estás viendo está relacionado con problemas de permisos de archivo. Dado que estás intentando crear una base de datos en un contenedor Docker, es probable que el usuario dentro del contenedor no tenga suficientes permisos para acceder al archivo
global/pg_filenode.map
.Aquí tienes algunas posibles soluciones que puedes probar:
symfony console doctrine:database:create
dentro del contenedor sea el mismo usuario utilizado para crear la imagen de PostgreSQL. Puedes hacer esto configurando la variable de entornoPOSTGRES_USER
en tu archivodocker-compose.yml
con el mismo nombre de usuario que utilizas para ejecutar el comando Symfony.Verifica los permisos del volumen que estás utilizando para almacenar los datos de PostgreSQL. En tu archivo
docker-compose.yml
, estás utilizando un volumen nombradodb-data
. Puedes verificar los permisos de este volumen ejecutando el comandodocker volume inspect db-data
. Asegúrate de que los permisos se vean correctos y que el usuario que ejecuta el comando Symfony tenga acceso de lectura y escritura al volumen.Puedes intentar configurar la opción
user
en tu contenedor de PostgreSQL para asegurarte de que el usuario que ejecuta el contenedor tenga los permisos correctos. Aquí tienes un ejemplo:En este ejemplo, estamos configurando la opción
user
con el UID y GID del usuario actual que ejecuta el contenedor. Esto debería asegurarse de que el contenedor tenga los permisos correctos para acceder a archivos y directorios.Espero que una de estas soluciones funcione para ti. ¡Avísame si tienes alguna otra pregunta!