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 IDs
2 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.

Print to terminal

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"
2
3 services:
4 strapi:
5 image: strapi/strapi
6 user: 1000:1000
7 environment:
8 DATABASE_CLIENT: postgres
9 DATABASE_NAME: strapi
10 DATABASE_HOST: postgres
11 DATABASE_PORT: 5432
12 DATABASE_USERNAME: strapi
13 DATABASE_PASSWORD: strapi
14 volumes:
15 - ./app:/srv/app
16 ports:
17 - "1337:1337"
18 depends_on:
19 - postgres
20
21 postgres:
22 image: postgres
23 user: 1000:1000
24 environment:
25 POSTGRES_DB: strapi
26 POSTGRES_USER: strapi
27 POSTGRES_PASSWORD: strapi
28
29 volumes:
30 - ./data:/var/lib/postgresql/data
31
32
33

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.