From d8805bd4edad4dba266062c67f40963045044cc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=BD=D1=81=D1=82=D0=B0=D0=BD=D1=82=D0=B8?= =?UTF-8?q?=D0=BD=20=D0=9B=D0=B5=D0=B1=D0=B5=D0=B4=D0=B8=D0=BD=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=D0=B9?= Date: Wed, 1 Apr 2026 22:10:18 +0500 Subject: [PATCH] =?UTF-8?q?fix(docker):=20CRLF=20=D0=B2=20entrypoint=20?= =?UTF-8?q?=D0=BD=D0=B0=20Windows;=20.gitattributes=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20*.sh;=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .gitattributes | 3 +++ Dockerfile | 5 ++++- README.md | 12 ++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 .gitattributes 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, либо **один раз** пересоздать том (данные БД пропадут):