понедельник, 1 декабря 2025 г.

Проблема с переносом строк в Windows/WSL


Если вы редактировали скрипт (участвующий в процедуре make) типа wait-for-postgres.sh в среде Windows, он может использовать окончания строк в стиле Windows (CRLF), которые вызывают проблемы в Linux-контейнерах (которые ожидают LF). Интерпретатор /bin/sh видит символ возврата каретки как часть имени команды, и в результате файл не может быть выполнен.
Решение: Преобразовать файл в формат LF.

Можно открыть файл в редакторе, например VS Code, и в правом нижнем углу выбрать формат окончания строк LF.

Git не сохраняет такое изменение, надо проводить изменение во всех экземплярах.

docker-compose

 В случае необходимости пересборки контейнеров (или если они больше не нужны), находясь в папке с файлом docker-compose даем команду:

docker-compose down

# Принудительно пересоберите образ
make build

# Запустите снова
make run

Ошибка типа '/var/lib/postgresql/data': Operation not permitted, при запуске контейнеров в docker-compose при использовании WSL

Это очень распространенная проблема при использовании Docker в Windows с WSL 2, особенно если файлы проекта находятся в смонтированном разделе Windows (/mnt/c/...), а не в файловой системе Linux WSL (~/...).

Если вы используете WSL 2 и ваши файлы находятся на разделе NTFS (например, в директории /mnt/c/Users/...), то стандартные команды Linux chmod и chown не могут изменить реальные права доступа для процессов внутри контейнера Docker из-за ограничений монтирования WSL/NTFS.

Решение- использование именованных томов Docker (рекомендуется)
Вместо того чтобы монтировать конкретную локальную папку на вашем хосте (./.database/postgres/data) внутрь контейнера, мы позволим Docker управлять хранилищем данных самостоятельно через "именованный том" (named volume). Docker Volumes хранятся в специальном управляемом Docker'ом месте, где проблем с правами доступа не возникает.
Это самый чистый и надежный способ для работы с базами данных в Docker.

В файле docker-compose.yml надо заменить 
volumes:
    - ./.database/postgres/data:/var/lib/postgresql/data
на
volumes:
    - pgdata:/var/lib/postgresql/data
и добавить в конец файла:
volumes:
  pgdata: