我正在嘗試撰寫最簡單的 docker 檔案,該檔案將運行InsertVolume在 package 中命名的主類scripts。這是我的Dockerfile:
FROM adoptopenjdk/openjdk11:latest
ENV MAVEN_VERSION 3.3.9
RUN mkdir -p /usr/share/maven \
&& curl -fsSL http://apache.osuosl.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz \
| tar -xzC /usr/share/maven --strip-components=1 \
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
CMD "mvn compile exec:java -Dexec.mainClass=\"scripts.InsertVolume\""
這是運行命令的結果
docker build -f Dockerfile -t test/insert .
:
[ ] Building 0.8s (6/6) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 37B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/adoptopenjdk/openjdk11:latest 0.7s
=> [1/2] FROM docker.io/adoptopenjdk/openjdk11:latest@sha256:ec7b07fa180861542ae8af31fbdad43f2f133170b43d29204a4b89e8f56a4c6f 0.0s
=> CACHED [2/2] RUN mkdir -p /usr/share/maven && curl -fsSL http://apache.osuosl.org/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz | tar -xzC /usr/share/maven --strip-components=1 && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:22b094dc17fc3e41b7db6cea72819e5fef1edff6dedf4c291345546fb4f53019 0.0s
=> => naming to docker.io/test/insert 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
當我嘗試使用以下方法運行影像時:
docker run test/insert
我收到錯誤:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "mvn compile exec:java -Dexec.mainClass=\"scripts.InsertVolume\"": executable file not found in $PATH: unknown.
mvn compile exec:java -Dexec.mainClass="scripts.InsertVolume"當我對專案執行時, mvn 命令成功運行(不使用 docker)。
如何修改以Dockerfile使其編譯并執行該類scripts.InsertVolume?
mvn compile在 Dockerfile 中使用應該使主類能夠運行?
更新 :
經過一些除錯后,我讓它可以與以下 Dockerfile 一起使用:
FROM adoptopenjdk/openjdk11:latest
ENV MAVEN_VERSION 3.3.9
RUN mkdir -p /usr/share/maven \
&& curl -fsSL http://apache.osuosl.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz \
| tar -xzC /usr/share/maven --strip-components=1 \
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
COPY pom.xml /build/
COPY src /build/src/
WORKDIR /build/
RUN mvn clean package
ENTRYPOINT ["java", "-jar", "target/test-1.0-SNAPSHOT.jar"]
# docker build -f Dockerfile -t test/insert .
# docker run -it --rm test/insert
更新的關鍵是復制專案 src 并使用命令構建:
COPY pom.xml /build/
COPY src /build/src/
WORKDIR /build/
RUN mvn clean package
uj5u.com熱心網友回復:
首先檢查是否tar -xzC /usr/share/maven --strip-components=1做了你認為應該做的事情。
換句話說,在您的 Dockerfile 中,添加用于測驗的RUN ls -alrth /usr/bin/mvnetRUN find /usr/share/maven/以仔細檢查符號鏈接是否/usr/bin/mvn實際參考了現有 /usr/share/maven/bin/mvn檔案。
您也可以使用docker run -it --rm test/insert bash.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/400840.html
