【问题标题】:Writing Dockerfile for Dockerhub Automated builds为 Dockerhub 自动构建编写 Dockerfile
【发布时间】:2016-08-19 13:51:58
【问题描述】:

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

我有一个 Maven 项目。在本地环境中,我运行项目所做的只是:

mvn clean package jetty:run

我现在正在尝试将其打包为链接到 github 存储库的自动化 dockerhub 构建。以下是我采取的步骤:

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

当我提交更改时,我可以看到它触发了构建并且构建成功。但是,当我运行 docker 映像时,它会返回以下错误:

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 命令,但无法使其工作。

请帮忙。

【问题讨论】:

标签: docker dockerfile


【解决方案1】:

这里的问题是,“mvn”是命令,“clean”、“package”和“jetty:run”是它的参数。像 bash 这样的 shell 会自动将它们分开。 Docker 没有。

CMD ["mvn clean package jetty:run"] 让 docker 搜索名称类似于 "/usr/bin/mvn clean package jetty:run" 的文件,但它当然不存在。

正确的形式是:

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

在你的情况下:

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

【讨论】:

    【解决方案2】:

    maven Dockerfile 已经包含复制指令,当您docker build 您的图像时激活(使用ONBUILD directive)。
    它基于 maven image 将 mvn 放入 /usr/bin

    你不应该做一个 maven 命令,而是像described in the doc

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

    将此文件放在项目的根目录中,在pom.xml 旁边。

    此映像包含多个 ONBUILD 触发器,您应该只需要这些触发器即可进行引导。构建将COPY . /usr/src/app 和运行mvn install

    这意味着生成的镜像已经复制了源代码并且 mvn 编译了应用程序,因为 ONBUILD 指令,使其不适合 Dockerhub 自动构建。

    【讨论】:

    • 我对你所说的有点困惑。我的需要是运行应用程序。我需要做什么才能实现它?在本地环境中,我使用不同的 mvn 插件来获得干净的启动。如何在 Docker 中实现它?我应该还是不应该使用 ONBUILD 图像?或者我应该自己编写 ONBUILD 触发器。我知道这有点基本,但我仍然在努力解决它。
    • @Ritwik 我的意思是应用程序已经在 docker build 上编译。这就是基础映像使用其 ONBUILD 指令所做的事情。所以你的图像应该有一个作为 CMD 的命令来运行应用程序,而不是编译它。
    • 也许我需要一点帮助。所以我修改了 Dockerfile,它现在看起来像这样:FROM maven:3.3-jdk-7-onbuild CMD ["mvn jetty:run"] 当我执行 docker run 时,它仍然会抛出类似的错误 docker: Error response from daemon: Container command 'mvn jetty:run' not found or does not exist..
    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 2021-06-17
    • 2017-08-26
    • 1970-01-01
    相关资源
    最近更新 更多