Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.5K
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda