编写Dockerhub的Dockerfile自动构build
我是Docker的新手,所以我正在努力解决一个非常基本的问题。
我有一个maven项目。 在当地的环境下,我所做的一切就是:
mvn clean package jetty:run
我现在正在尝试打包链接到github回购自动dockerhub生成。 以下是我采取的步骤:
- 如下创build一个Dockerfile并将其添加到基本文件夹
- 提交代码给github
- 在dockerhub创build并连接了一个Autobuild仓库到Github仓库。
- 进行必要的更改以指向特定的分支和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的可选项。