es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 ###

Tags:  , , ,

Answer

  1. Avatar for 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:

    1. Asegúrate de que el usuario que ejecuta el comando 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 entorno POSTGRES_USER en tu archivo docker-compose.yml con el mismo nombre de usuario que utilizas para ejecutar el comando Symfony.
    2. 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 nombrado db-data. Puedes verificar los permisos de este volumen ejecutando el comando docker 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.

    3. 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:

    database:
      image: postgres:${POSTGRES_VERSION:-13}-alpine
      environment:
        POSTGRES_DB: ${POSTGRES_DB:-app}
        POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-ChangeMe}
        POSTGRES_USER: ${POSTGRES_USER:-symfony}
      volumes:
        - db-data:/var/lib/postgresql/data:rw
      user: "${UID}:${GID}"
    

    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!

Comments are closed.