编写Dockerhub的Dockerfile自动构build

我是Docker的新手,所以我正在努力解决一个非常基本的问题。

我有一个maven项目。 在当地的环境下,我所做的一切就是:

mvn clean package jetty:run 

我现在正在尝试打包链接到github回购自动dockerhub生成。 以下是我采取的步骤:

  1. 如下创build一个Dockerfile并将其添加到基本文件夹
  2. 提交代码给github
  3. 在dockerhub创build并连接了一个Autobuild仓库到Github仓库。
  4. 进行必要的更改以指向特定的分支和Dockerfile

当我提交更改时,我可以看到它触发了一个构build,并且构build成功。 但是,当我运行泊坞窗图像时,它回来了以下错误:

 docker: Error response from daemon: Container command 'mvn clean package jetty:run' not found or does not exist.. 

这里是文件夹结构:

 /Dockerfile /pom.xml /src/<folders that contain the code> 

这是我在Dockerfile中的:

 FROM maven:3.3.9-jdk-8 CMD ["mvn clean package jetty:run"] 

我想我错过了将代码的副本提取到容器中。 但是这样做的最好方法是什么? 我尝试了COPY命令,但是无法使其工作。

请帮忙。

这里的问题是,“mvn”是命令,“clean”,“package”和“jetty:run”是它的参数。 贝壳像bash自动分离它们。 Docker没有。

CMD [“mvn clean package jetty:run”]让dockersearch一个名为“/ usr / bin / mvn clean package jetty:run”的文件,这当然不存在。

正确的forms是:

 CMD ["executable","param1","param2"] 

在你的情况下:

 CMD ["/usr/bin/mvn", "clean", "package", "jetty:run"] 

maven Dockerfile已经包含了复制指令,在ONBUILD docker build你的映像时(用ONBUILD指令 )激活。
它基于将mvn放在/usr/bin的maven映像 。

你不应该做一个maven命令,而应该像文档中所描述的那样

 FROM maven:3.2-jdk-7-onbuild CMD ["do-something-with-built-packages"] 

把这个文件放在你的项目的根目录下,在pom.xml旁边。

这个图像包含了多个ONBUILD触发器,这些触发器应该是您需要的所有引导程序。 构build将COPY . /usr/src/app COPY . /usr/src/app并运行mvn install

这意味着由于ONBUILD指令,生成的图像已经复制了源代码并且mvn编译了应用程序,使得它成为Dockerhub自动化构build的可选项。