Browse Source

fix(docker): CRLF в entrypoint на Windows; .gitattributes для *.sh; README

Made-with: Cursor
master
Константин Лебединский 2 weeks ago
parent
commit
d8805bd4ed
  1. 3
      .gitattributes
  2. 5
      Dockerfile
  3. 12
      README.md

3
.gitattributes vendored

@ -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

5
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"]

12
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, либо **один раз** пересоздать том (данные БД пропадут):

Loading…
Cancel
Save