Docker: configurando permissões de escrita
Depois de ter falhado no cronograma das postagens retornei com uma solução para um problema que encontrei nos últimos dias. Se você utiliza linux e teve probllemas pra rodar um ambiente local com docker talvez também teve problemas para persistir dados do banco ou com leitura e escrita de arquivos.
Estou utilizando o POP_OS mas acredito que acontece em qualquer Ubuntu based a partir do 20.04. Nesse link, uma das resposta explica que o gid(group id) do docker que era 999 agora é atribuído ao systemd-coredump e o default do docker é 998.
Se verificar o Dockerfile do Postgres vai encontrar o seguinte trecho:
1 # explicitly set user/group IDs2 RUN set -eux; \3 groupadd -r postgres --gid=999; \4
O que significa que o systemd-coredumb é quem terá as permissões durante a execução do container como exibido na imagem abaixo.
A solução que encontrei foi passar o user diretamente no service do docker-compose que eu estava utilizando. Para descobrir o uid e o gid do usuário executa do terminal o comando id seusuario, no meu caso 1000:1000 e eu passei o user para cada service do docker composer. O exemplo abaixo é do docker-compose do Strap.
1 version: "3"23 services:4 strapi:5 image: strapi/strapi6 user: 1000:10007 environment:8 DATABASE_CLIENT: postgres9 DATABASE_NAME: strapi10 DATABASE_HOST: postgres11 DATABASE_PORT: 543212 DATABASE_USERNAME: strapi13 DATABASE_PASSWORD: strapi14 volumes:15 - ./app:/srv/app16 ports:17 - "1337:1337"18 depends_on:19 - postgres2021 postgres:22 image: postgres23 user: 1000:100024 environment:25 POSTGRES_DB: strapi26 POSTGRES_USER: strapi27 POSTGRES_PASSWORD: strapi2829 volumes:30 - ./data:/var/lib/postgresql/data313233
Após adicionar o user eu criei as pastas para os volumes antes de rodar o container. Primeiro rodei docker-compose build e em seguida docker-compose up e agora funciona normalmente a leitura e escrita.