Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.5K
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!