PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Problema de permissão com o PostgreSQL no contêiner docker


A outra resposta de fato aponta para a causa raiz do problema, no entanto, a página de ajuda para a qual ela aponta não contém uma solução. Aqui está o que eu inventei para fazer isso funcionar para mim:
  1. inicie o contêiner usando seu arquivo de composição do docker normal, isso cria o diretório com o uid:gid (999:999) codificado permanentemente
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. pare o contêiner e altere manualmente a propriedade para uid:gid que você deseja (vou usar 1000:1000 para este exemplo
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data 
  1. Edite seu arquivo docker para adicionar o uid:gid desejado e inicie-o novamente usando docker-compose (observe o 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

A razão pela qual você não pode simplesmente usar user: desde o início é que, se a imagem for executada como um usuário diferente, ela falhará ao criar os arquivos de dados.

Na página de documentação da imagem , ele menciona uma solução para adicionar um volume para expor o /etc/passwd arquivo como somente leitura na imagem ao fornecer --user opção, no entanto, que não funcionou para mim com a imagem mais recente, pois estava recebendo o seguinte erro. Na verdade, nenhuma das três soluções propostas funcionou para mim.
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted