diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..420cf45 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +# Скрипты для Linux-контейнеров — только LF (иначе на Windows: exec /docker-entrypoint.sh: no such file or directory) +*.sh text eol=lf +docker-entrypoint.sh text eol=lf diff --git a/Dockerfile b/Dockerfile index 4386137..41eaf24 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,10 @@ COPY --from=backend-build /app/backend/prisma ./prisma COPY --from=backend-build /app/backend/package.json ./package.json COPY --from=frontend-build /app/frontend/dist ./public COPY docker-entrypoint.sh /docker-entrypoint.sh -RUN chmod +x /docker-entrypoint.sh +# Убрать CRLF после checkout на Windows (иначе: exec /docker-entrypoint.sh: no such file or directory) +RUN tr -d '\r' < /docker-entrypoint.sh > /tmp/docker-entrypoint.sh && \ + mv /tmp/docker-entrypoint.sh /docker-entrypoint.sh && \ + chmod +x /docker-entrypoint.sh EXPOSE 3107 ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["node", "dist/index.js"] diff --git a/README.md b/README.md index 5b66953..a2847f7 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,18 @@ При первом старте контейнер приложения выполняет `prisma migrate deploy` и сид пользователей (если пользователей ещё нет). +### Windows: `exec /docker-entrypoint.sh: no such file or directory` + +Обычно это **CRLF** в `docker-entrypoint.sh` после клонирования на Windows. В репозитории задан **`.gitattributes`** (для `*.sh` — только LF). Обновите репозиторий и пересоберите образ без кэша: + +```bash +git pull +docker compose build --no-cache app +docker compose up -d +``` + +Если проблема осталась: `git config core.autocrlf false`, затем `git add --renormalize .` и зафиксируйте изменения или переклонируйте репозиторий; либо в редакторе сохраните `docker-entrypoint.sh` с окончаниями строк **LF (Unix)**. При сборке образа символы `\r` в скрипте также удаляются автоматически. + ### Тома данных - **`pgdata`** — данные PostgreSQL. Пароль пользователя БД задаётся в **`POSTGRES_PASSWORD`** только при **первом** создании тома. Если сменить пароль в `.env` позже, сам PostgreSQL **не** пересоздаст пароль автоматически — приложение не подключится (ошибка Prisma `P1000`). Варианты: вернуть в `.env` старый пароль, либо сменить пароль вручную в Postgres, либо **один раз** пересоздать том (данные БД пропадут):