我正在使用包含所有maven配置、密钥、maven命令和所有内容的sh文件,我想从Dockerfile内部执行这个sh文件,以便在运行容器时执行sh文件。
这是我的Docker文件的外观:
#using alpine jdk
FROM somewhere.docker.hub/build/alpine:latest AS fetch
#MVN as build tool
FROM somewhere.docker.hub/build/maven:3.5.3-jdk-8 AS build
#Settings.xml for downloading dependencies from nexus repository
ARG MVN_SETTINGS=settings.xml
#Defining the current working repository
WORKDIR /usr/src/app
#Coping the pom.xml into working directory
COPY pom.xml /usr/src/app
COPY ${MVN_SETTINGS} /usr/src/app/settings.xml
# Download the package and make it cached in docker image
#RUN mvn -B -f ./pom.xml -s settings.xml dependency:resolve
#Coping the source code into the working repository
COPY . /usr/src/app
#Run the sh file
#RUN chmod a+x /usr/src/app/DockerTest.sh
# Not using the full path of DockerTest.sh file because it is already in the work directory as defined above
RUN chmod a+x DockerTest.sh
DockerTest。sh文件如下所示。
#!/bin/sh
mvn clean install
mvn test
当我创建docker图像并运行该图像时,它显示了这个错误。我试过很多东西,但仍然不起作用,这表明了这个错误
尚未为此生成指定目标。您必须以以下格式指定有效的生命周期阶段或目标:或:[:]。可用的生命周期阶段包括:验证、初始化、生成源、流程源、生成资源、流程资源、编译、流程类、生成测试源、流程测试源、生成测试资源、流程测试资源、测试编译、流程测试类、测试、准备包、包、集成前测试、集成测试、集成后测试、验证、安装、,部署,预清理,清理,后清理,前站点,站点,后站点,站点部署-
首先,您不能通过使用多个行逐个组合两个Docker图像。甚至可以指定多个的原因是为了支持多阶段构建。
其次,如果您没有使用这一行:
RUN mvn -B -f ./pom.xml -s settings.xml dependency:resolve
你也可以对此发表评论:
COPY pom.xml /usr/src/app
因为您的POM将与其他源代码一起复制。
第三,从您的Dockerfile来看,您的工作目录中有几个settings.xml
文件,您想根据构建参数选择一个。但是,如果您说settings.xml
和settings.prod.xml
,并且您将MVN_SETTINGS
设置为settings.prod.xml
,那么/usr/src/app/settings.xml
将被这一行覆盖:
COPY . /usr/src/app
用settings.xml
。
第四,mvn clean install也运行测试,不需要单独进行mvn测试。
最后,对于您注意到的问题。我不确定您运行映像时会发生什么,但是您没有指定要在Dockerfile中运行的任何入口点或命令,因此您的映像从其基础继承了默认的入口点或命令。现在假设
)。somewhere.docker.hub/build/maven: 3.5.3-jdk-8
您实际上是指docker.io/library/maven: 3.5.3-jdk-8
,那么命令是mvn
,入口点是/usr/local/bin/mvn-entrypoint.sh
(请参阅此处更新的映像的Dockerfile
综上所述,假设您想在运行映像时运行DockerTest.sh
,您的Dockerfile
应该如下所示:
FROM maven:3.5.3-jdk-8
ARG MVN_SETTINGS=settings.xml
WORKDIR /usr/src/app
COPY . .
COPY ${MVN_SETTINGS} settings.xml
RUN chmod a+x DockerTest.sh
CMD ./DockerTest.sh
此外,如果您真的想在构建期间使用您的settings.xml
,您需要将您的DockerTest.sh
更改为:
#!/bin/sh
mvn --settings /usr/src/app/settings.xml clean install
您还可以通过执行以下操作来删除不必要的复制同一文件两次:
FROM maven:3.5.3-jdk-8
ARG MVN_SETTINGS=/usr/src/app/settings.xml
ENV MVN_SETTINGS=${MVN_SETTINGS}
WORKDIR /usr/src/app
COPY . .
RUN chmod a+x DockerTest.sh
CMD ./DockerTest.sh
和
#!/bin/sh
mvn --settings "$MVN_SETTINGS" clean install
问题内容: 我将如何执行.SH文件(这是localhost,没有远程连接或其他任何内容)?当我进行搜索时,我看到了很多其他东西,但这些似乎没有用。 这是Java6。同样重要的是,SH所做的只是在移动两个文件夹。 谢谢! 问题答案: 您可以使用ProcessBuilder
问题内容: 我将如何执行.SH文件(这是localhost,没有远程连接或其他任何内容)?当我进行搜索时,我看到了很多其他东西,但这些似乎没有用。 这是Java6。同样重要的是,SH所做的只是在移动两个文件夹。 谢谢! 问题答案: 您可以使用ProcessBuilder
我是docker和dockerfile文件的新手,刚刚开始尝试编写它们。我已经构建了一个简单的java控制台应用程序,可以成功地从dockerfile构建docker映像,但是如果我包括 当我尝试运行映像时,总是会出现bin/sh错误,通常是“java未找到”之类的错误。 但是,当我不包含CMD行时,只需使用此Dockerfile来构建我的映像 然后再跑 然后我就可以跑了 应用程序按预期运行。 我
我试图建立我自己的dokcher图像基于一个简单的Spring引导项目,使用的是Fabch8 maven插件,这是我的配置 正如其他帖子所建议的那样,我公开了我的docker doamon,但当我在Intellij中运行此命令行时,一切都不起作用 我得到了这个堆栈跟踪 我是否需要在我的机器上创建本地docker中心(Docker桌面)。问题是,当我使用命令行窗口CMD,我去那里docker文件存在
我正在使用sh文件,其中包含所有专家配置,密钥,专家命令。当我运行容器时,它每次都会一次又一次地下载依赖项,它无法缓存依赖项。 下面是我的Dockerfile的外观: 下面是Test.sh文件 当我创建docker映像并运行容器时,每当我运行它时,它就会一次又一次地下载依赖项。
在更新到Appengine版本1.9.10后,我无法使用maven命令mvn Appengine:update直接在Appengine上部署应用程序,并引发以下异常: [错误]找不到目标“update;”在plugin com.google.appengine中:appengine-maven-plugin:1.9.10在可用目标中[错误]使用-x开关重新运行Maven以启用完全调试日志记录。[错