Estoy tratando de ejecutar una imagen acoplable con PostgreSQL que tiene un volumen configurado para datos persistentes.
version: '3.1' services: db: image: postgres restart: always volumes: - ./data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: exampleCuando 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?
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í:
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 $ docker stop postgres $ sudo chown -R 1000:1000 ./datauser: 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 permittedEsto 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.