Update Dockerfile to enhance runtime configuration and health check
- Added `gosu` for safe privilege dropping in the entrypoint script. - Updated the entrypoint to use `docker-entrypoint.sh` for improved container management. - Ensured necessary directories are created with appropriate permissions during the build process. - Enhanced health check command to verify service availability more reliably.
This commit is contained in:
+8
-7
@@ -30,17 +30,18 @@ RUN dotnet publish backend/src/PnvPanel.Api/PnvPanel.Api.csproj -c Release -o /a
|
||||
# ── Stage 3: runtime ──────────────────────────────────────────────────────
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
|
||||
WORKDIR /app
|
||||
# curl — только для HEALTHCHECK в docker-compose (GET /health), в образе его нет по умолчанию.
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends curl \
|
||||
# curl — HEALTHCHECK (GET /health). gosu — безопасный drop-privileges из entrypoint: контейнер
|
||||
# стартует под root, чтобы почистить владельца смонтированных volume'ов, и тут же передаёт
|
||||
# управление непривилегированному пользователю (см. docker-entrypoint.sh).
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends curl gosu \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
ENV ASPNETCORE_ENVIRONMENT=Production \
|
||||
ASPNETCORE_HTTP_PORTS=8080
|
||||
EXPOSE 8080
|
||||
COPY --from=backend /app/publish ./
|
||||
# Data Protection key-ring и загрузки тикетов монтируются сюда volume'ами (см. docker-compose.yml).
|
||||
# Готовим права заранее — Docker скопирует владельца/содержимое в volume при первом маунте (copy-up).
|
||||
RUN mkdir -p /app/keys /app/uploads && chown -R app:app /app/keys /app/uploads
|
||||
USER app
|
||||
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
|
||||
RUN chmod +x /usr/local/bin/docker-entrypoint.sh && mkdir -p /app/keys /app/uploads
|
||||
HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=5 \
|
||||
CMD curl -f http://localhost:8080/health || exit 1
|
||||
ENTRYPOINT ["dotnet", "PnvPanel.Api.dll"]
|
||||
ENTRYPOINT ["docker-entrypoint.sh"]
|
||||
CMD ["dotnet", "PnvPanel.Api.dll"]
|
||||
|
||||
Reference in New Issue
Block a user