【问题标题】:Building Docker image from Spring Boot Jar从 Spring Boot Jar 构建 Docker 映像
【发布时间】:2017-02-11 18:22:46
【问题描述】:

我正在尝试学习如何使用 spring boot fat jar 启动和运行 Docker。我已经安装了所有东西,可以从 Docker Hub 运行 Hello World 示例。

我使用名为 predictive-text-tree-0.0.1-SNAPSHOT.jar 的 Maven 创建了胖 jar,并将以下内容用作我的 dokerfile.docker:

FROM java:8
MAINTAINER ltocode
EXPOSE 8080
ADD predictive-text-tree-0.0.1-SNAPSHOT.jar /data/predictive-text-tree-0.0.1-SNAPSHOT.jar
CMD java -jar /data/textpredict.jar

我在服务器上有 jar 和 docker 文件,当我运行 docker build 命令时,我得到以下信息:

~/build# docker build -t predictable-text-tree-0.0.1-SNAPSHOT.jar

t 的参数“predictive-text-tree-0.0.1-SNAPSHOT.jar”无效:解析参考时出错:“predictive-text-tree-0.0.1-SNAPSHOT.jar”不是有效的存储库/标签 请参阅“docker build --help”。

如何从 fat jar 构建 docker 镜像?

【问题讨论】:

    标签: docker spring-boot


    【解决方案1】:

    您在构建命令中提供了不正确的参数。 -t 参数用于标记生成的图像。这意味着,-t 应该后跟图像名称,而不是 jar 文件。您可以在docker build document找到更多详细信息。

    【讨论】:

      【解决方案2】:

      我也有同样的情况。 我有一个使用嵌入式 H2 数据库的示例 Spring Boot 应用程序。我已经制作了一个 Dockerfile 如下。

      FROM openjdk:8
      EXPOSE 8081
      ADD target/book-rest-api-reactjs-0.0.1-SNAPSHOT.jar book-rest-api-reactjs-0.0.1-SNAPSHOT.jar
      ENTRYPOINT ["java","-jar","/book-rest-api-reactjs-0.0.1-SNAPSHOT.jar"] 
      

      然后我使用以下命令构建 docker。

      docker build -t book-rest-api-reactjs.jar .

      接下来使用以下命令列出图像以确保图像在本地可用。

      docker 镜像 ls

      然后使用以下命令运行映像。

      docker run -p 9090:8081 book-rest-api-reactjs.jar

      现在当我访问端点(http://localhost:9090/rest/books)时,我能够得到结果。

      【讨论】:

        【解决方案3】:

        为了更优雅的方式:过去,docker-maven-plugin 最适合我,这里是预览:

        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>VERSION GOES HERE</version>
            <configuration>
                <imageName>example</imageName>
                <baseImage>java:8</baseImage>
                <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]   </entryPoint>
                <!-- copy the service's jar file from target into the root directory of the image --> 
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
        

        除了可以在您的项目中正确构建它之外,还可以将图像直接推送到 docker 注册表:

        mvn ... docker:build -DpushImageTags -DdockerImageTag=latest -DdockerImageTag=tag

        【讨论】:

          猜你喜欢
          • 2018-09-03
          • 2017-02-11
          • 2018-08-26
          • 2019-02-09
          • 1970-01-01
          • 2016-09-29
          • 2020-09-18
          • 2021-01-27
          • 1970-01-01
          相关资源
          最近更新 更多