Ich habe ein einfaches Projekt grdle, die ich in den Docker ContainerBuild gradle Projekt in einem Docker
bauen Ich habe eine mehrstufige Docker bauen. Die erste Phase klon das Projekt von Github. Die zweite Phase muss das Projekt aufbauen, damit ich es in der Endphase ausführen kann. Aber es funktioniert nicht auf in
FROM gradle:4.2.1-jdk8-alpine
WORKDIR /app
COPY --from=0 /app/myProject /app
RUN ./gradlew build --stacktrace
Der Befehl ./gradlew build --stacktrace
nicht ausgeführt und schlägt mit dem Fehler werden kann:
FAILURE: Build failed with an exception.
* What went wrong:
Could not update /app/.gradle/3.5-rc-2/file-changes/last-build.bin
und die Stacktrace:
org.gradle.api.UncheckedIOException: Could not update /app/.gradle/3.5-rc-2/file-changes/last-build.bin
at org.gradle.api.internal.changedetection.state.FileTimeStampInspector.updateOnFinishBuild(FileTimeStampInspector.java:72)
at org.gradle.api.internal.changedetection.state.BuildScopeFileTimeStampInspector.stop(BuildScopeFileTimeStampInspector.java:38)
at org.gradle.internal.concurrent.CompositeStoppable.stop(CompositeStoppable.java:98)
.....
Caused by: java.io.FileNotFoundException: /app/.gradle/3.5-rc-2/file-changes/last-build.bin (Permission denied)
at java.io.FileOutputStream.open0(Native Method)
......
Warum die Docker Benutzer nicht Berechtigung zum Erstellen einer Datei im Arbeitsverzeichnis und zum Hinzufügen dieser Berechtigungen? Einfache RUN chmod 777 /app
funktioniert nicht und sagt mir: chmod: /app: Operation not permitted
Werfen Sie einen Blick auf die Docker-Datei für gradle: 4.2.1-jdk8 alpinen https://github.com/
Sie sollten die richtigen Berechtigungen für die Einstellung drei zusätzliche Befehle in Ihrem Dockerfile hinzufügen keeganwitt/docker-gradle/Blob/2d38bdd0ca754b0ee54ad29a483778fd84bfcbe4/jdk8 alpinen/Dockerfile. Es setzt USER "Gradle". Die Dateien, die Sie aus Ihrem Anwendungsverzeichnis in das Anwendungsverzeichnis von docker image kopieren, verfügen möglicherweise nicht über die richtigen Berechtigungen für den Benutzer "gradle". Jetzt funktioniert RUN chmod nicht, weil dieser Befehl ausgeführt wird, als wäre er wieder ein "grandle" Benutzer im Docker Kontext. Sie müssen also "chown -R niemand: niemand/Pfad/zu/app/myProject" auf Ihrem lokalen Terminal ausführen und dann das Docker-Image erstellen. – Cyclops
@Cyclops danke für den Kommentar. Was meinst du mit lokalen Terminal? Kann ich es nicht in meiner Dockerfile automatisieren? –
Sie können die folgenden 3 Befehle in Ihrer Docker-Datei hinzufügen: -------- 1. USER root # Dies ändert den Standardbenutzer auf root 2. RUN chown -Rgradle/app # Dies ändert Besitz des Ordners 3 Benutzer GRADLE # Dies ändert den Benutzer wieder auf den Standardbenutzer "GRADLE" – Cyclops