我正在尝试编写最简单的docker文件,该文件将在包InsertVolume中运行一个名为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.当我针对项目执行时(不使用docker),mvn命令mvn compile exec:java -Dexec.mainClass="scripts.InsertVolume"成功运行。
如何修改Dockerfile,使其编译和执行类scripts.InsertVolume?
在Dockerfile中使用mvn compile应该可以运行主类吗?
最新情况:
经过一些调试后,我可以使用以下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发布于 2022-01-01 00:13:21
首先检查tar -xzC /usr/share/maven --strip-components=1是否做了您认为应该做的事情。
换句话说,在您的Dockerfile中,添加用于测试RUN ls -alrth /usr/bin/mvn et RUN find /usr/share/maven/以重复检查符号链接/usr/bin/mvn实际上引用了现有的/usr/share/maven/bin/mvn文件。
您也可以对docker run -it --rm test/insert bash进行同样的操作。
https://stackoverflow.com/questions/70545831
复制相似问题