Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.5K
Vistas
Problema de permiso con PostgreSQL en el contenedor docker

Estoy tratando de ejecutar una imagen acoplable con PostgreSQL que tiene un volumen configurado para datos persistentes.

docker-compose.yml

 version: '3.1' services: db: image: postgres restart: always volumes: - ./data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: example

Cuando inicio el contenedor, veo la salida.

arreglando permisos en el directorio existente /var/lib/postgresql/data ... ok

y la carpeta de datos ya no es legible para mí.

Si me elevo y accedo al directorio de datos, puedo ver que los archivos están allí. Además, el comando ls -ld data me da

 drwx------ 19 systemd-coredump root 4096 May 17 16:22 data

Puedo configurar manualmente el permiso del directorio con sudo chmod 755 data , pero eso solo funciona hasta que reinicio el contenedor.

¿Por qué sucede esto y cómo puedo solucionarlo?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

La otra respuesta apunta a la causa raíz del problema, sin embargo, la página de ayuda a la que apunta no contiene una solución. Esto es lo que se me ocurrió para hacer que esto funcione para mí:

  1. inicie el contenedor usando su archivo docker-compose normal, esto crea el directorio con el uid:gid codificado (999:999)
 version: '3.7' services: db: image: postgres container_name: postgres volumes: - ./data:/var/lib/postgresql/data environment: POSTGRES_USER: fake_database_user POSTGRES_PASSWORD: fake_database_PASSWORD
  1. detenga el contenedor y cambie manualmente la propiedad a uid:gid que desee (usaré 1000:1000 para este ejemplo
 $ docker stop postgres $ sudo chown -R 1000:1000 ./data
  1. Edite su archivo docker para agregar su uid: gid deseado y vuelva a iniciarlo usando docker-compose (observe al user:
 version: '3.7' services: db: image: postgres container_name: postgres volumes: - ./data:/var/lib/postgresql/data user: 1000:1000 environment: POSTGRES_USER: fake_database_user POSTGRES_PASSWORD: fake_database_password

La razón por la que no puede simplemente usar user: desde el principio es que si la imagen se ejecuta como un usuario diferente, no puede crear los archivos de datos.

En la página de documentación de la imagen , menciona una solución para agregar un volumen para exponer el /etc/passwd como de solo lectura en la imagen al proporcionar la opción --user , sin embargo, eso no funcionó para mí con la última imagen, ya que estaba recibiendo el siguiente error. De hecho ninguna de las tres soluciones propuestas funcionó para mí.

 initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted
over 4 years ago · Santiago Trujillo Denunciar

0

Esto se debe a lo que está escrito en el dockerfile de la imagen de postgres.
De la línea 15 a la 18, verá que se utilizan el grupo 999 y el usuario 999. Supongo que en su host, se asignan respectivamente a systemd-coredump y root .

Debe saber que siempre que use un usuario/grupo en una imagen, si el uid/gid existe en su host, se le asignará.

Puede leer la documentación en el centro acoplable desde la imagen de postgres aquí . Hay una sección Notas de usuario arbitrarias que explican cómo funciona en el contexto de esta imagen.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda