JAVA_TOOL_OPTIONS made the JVM print "Picked up ..." on every invocation, and the entrypoint already sets file.encoding through JAVA_OPTS. useradd --system warned because the uid is above SYS_UID_MAX; the explicit uid is what matters. Verified end to end on Docker 29.4: image builds, the full pipeline runs inside the container against a read-only collection mount, the frontend and MCP answer on the published port, and the database survives a restart in the named volume. The read-only mount was confirmed to actually reject writes, and the container runs as uid 10001, not root. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
40 lines
1.5 KiB
Docker
40 lines
1.5 KiB
Docker
# Build wymaga submodułu vendor/Rex-EMoolator — composite build kompiluje :core
|
|
# ze źródeł. Jeśli katalog jest pusty, settings.gradle przerwie z komunikatem.
|
|
FROM eclipse-temurin:21-jdk AS build
|
|
WORKDIR /src
|
|
|
|
# najpierw sam opis buildu: zmiana w kodzie nie unieważnia pobranych zależności
|
|
COPY gradlew settings.gradle build.gradle gradle.properties ./
|
|
COPY gradle ./gradle
|
|
COPY vendor ./vendor
|
|
RUN ./gradlew --no-daemon dependencies --configuration runtimeClasspath > /dev/null 2>&1 || true
|
|
|
|
COPY src ./src
|
|
# installDist zamiast build: pomija check, a więc i verifyCoreVersion, które
|
|
# potrzebowałoby gita w obrazie. Wersję i tak przypina submoduł.
|
|
RUN ./gradlew --no-daemon installDist \
|
|
&& grep '^coreVersion=' gradle.properties | cut -d= -f2 > /src/core-version
|
|
|
|
FROM eclipse-temurin:21-jre
|
|
WORKDIR /app
|
|
|
|
# obrazy płyt montowane z zewnątrz, tylko do odczytu; katalog danych to wolumen
|
|
VOLUME ["/data"]
|
|
# file.encoding ustawia entrypoint przez JAVA_OPTS; JAVA_TOOL_OPTIONS robiłoby
|
|
# to samo, ale JVM wypisuje wtedy "Picked up..." przy każdym uruchomieniu
|
|
ENV CATALOG_DATA=/data
|
|
|
|
COPY --from=build /src/build/install/rex-catalog /app
|
|
COPY --from=build /src/core-version /app/core-version
|
|
COPY docker-entrypoint.sh /app/entrypoint.sh
|
|
RUN chmod +x /app/entrypoint.sh \
|
|
&& useradd --uid 10001 --create-home katalog \
|
|
&& mkdir -p /data /media \
|
|
&& chown katalog:katalog /data
|
|
USER katalog
|
|
|
|
EXPOSE 8765
|
|
ENTRYPOINT ["/app/entrypoint.sh"]
|
|
# domyślnie wstajemy jako serwer; front i MCP dzielą port
|
|
CMD ["serve", "--host", "0.0.0.0"]
|