Добавить в корзинуПозвонить
Найти в Дзене
Дед в IT

Привет, товарищ

! Ситуация: ты запускаешь контейнер postgres:15 в Docker Compose, контейнер падает с ошибкой: pq: could not open file "global/pg_filenode.map": Permission denied Причина: Контейнер PostgreSQL работает от пользователя postgres (UID 999), а данные на volume (./postgres-data) принадлежат локальному пользователю (обычно UID 1000). PostgreSQL намеренно отказывается работать с томом, если у него нет прав на запись — это защита от повреждения данных. Как диагностировать: Ищи в логах именно эту строку: pq: could not open file "global/pg_filenode.map": Permission denied Если такая есть - проблема точно в правах доступа к томам. Решение: Шаг 1 — исправить права на каталог: sudo chown -R 999:999 ./postgres-data Шаг 2 — явно указать пользователя в compose (надёжное решение от повторения проблемы): ```yaml services:  db: image: postgres:15   user: "999:999"  volumes:    - ./postgres-data:/var/lib/postgresql/data ``` Выводы: При первом запуске без указания user Docker создаёт том от текущего пользо

Привет, товарищ!

Ситуация: ты запускаешь контейнер postgres:15 в Docker Compose, контейнер падает с ошибкой:

pq: could not open file "global/pg_filenode.map": Permission denied

Причина:

Контейнер PostgreSQL работает от пользователя postgres (UID 999), а данные на volume (./postgres-data) принадлежат локальному пользователю (обычно UID 1000). PostgreSQL намеренно отказывается работать с томом, если у него нет прав на запись — это защита от повреждения данных.

Как диагностировать:

Ищи в логах именно эту строку:

pq: could not open file "global/pg_filenode.map": Permission denied

Если такая есть - проблема точно в правах доступа к томам.

Решение:

Шаг 1 — исправить права на каталог:

sudo chown -R 999:999 ./postgres-data

Шаг 2 — явно указать пользователя в compose (надёжное решение от повторения проблемы):

```yaml

services: 

db:

image: postgres:15  

user: "999:999" 

volumes:   

- ./postgres-data:/var/lib/postgresql/data

```

Выводы:

При первом запуске без указания user Docker создаёт том от текущего пользователя (UID 1000). При перезапуске контейнер пытается записать от UID 999 → отказ в доступе → падение. Добавляй в docker-compose.yml секцию

user: "999:999"

для всех образов, работающих от непривилегированных пользователей:

- redis требует UID 999

- mongodb требует UID 999

Чтобы знать под каким пользователем запускается образ то это можно увидеть через

docker inspect <image> | grep User

Можно конечно было не разбираться с правами и сделать вот :

chmod -R 777 ./postgres-data 

Но это вредный совет и тебя покусает твой внутренний безопасник :)

Чтобы как я не тратить два часа времени на траблшутинг проверяй пользователя для новых образов :)

#docker #postgresql #devops #homelab #troubleshooting