sql >> Base de Datos >  >> RDS >> PostgreSQL

Problema de permiso con PostgreSQL en el contenedor docker

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 que esto funcione para mí:

  1. inicie el contenedor usando su archivo docker-compose normal, esto crea el directorio con el uid:gid (999:999) codificado de forma rígida
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 el 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 puedes simplemente usar user: desde el principio es que si la imagen se ejecuta como un usuario diferente, no se pueden crear los archivos de datos.

En la página de documentación de imágenes , menciona una solución para agregar un volumen para exponer el /etc/passwd archivo como de solo lectura en la imagen al proporcionar --user Sin embargo, esa opción no funcionó para mí con la última imagen, ya que recibí 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