【问题标题】:Building a Docker-Image with maven and spring-boot on Windows在 Windows 上使用 maven 和 spring-boot 构建 Docker-Image
【发布时间】:2018-05-02 18:34:02
【问题描述】:

我正在尝试学习如何使用 maven、spring-boot 和 docker 来创建 Web 应用程序。我正在关注本指南:

https://spring.io/guides/gs/spring-boot-docker/

我设法将 maven 项目构建为 localhost,显示“Hello Docker World”。

然后我复制了 Dockerfile 并添加了额外的属性和插件。

<properties>
    <java.version>1.8</java.version>
    <docker.image.prefix>springio</docker.image.prefix>
</properties>

...

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>1.3.6</version>
            <configuration>
                <repository>${docker.image.prefix}/${project.artifactId}</repository>
        <buildArgs>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

在执行mvn -N io.takeri:maven:wrapper 以添加 maven 包装器时,我收到一个错误: Error resolving version for plugin 'io.takeri:maven from the repositories[...]: Plugin not found in any plugin repository -&gt; [Help 1]

由于上面的命令已经尝试过不同的尝试(没有 docker),我检查了帮助 1-link

https://cwiki.apache.org//confluence/display/maven/pluginresolutionexception

并向 pom.xml 添加与其他项目相同的插件存储库。

这被证明是无效的。

在没有包装器的情况下执行项目(mvn install dockerfile:build)

给出一个MojoExecutionException,后跟一个很长的错误跟踪 和

error: Failed to execute goal com.spotify:dockerfile-maven-plugin:1.3.6:build    
(default.cli) on project ...: Could not build image:   
java.util.concurrent.ExecutionException: 
com.spotify.docker.client.shader.javax.ws.rs.ProcessingException: 
org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375    
[localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: 
connect

我该如何解决这个问题?

注意 1:我是 Maven、Spring-Boot、Docker 和 Stackoverflow 的新手,请告诉我如何改进这篇文章或了解更多信息。

注意 2:我正在运行 Windows 10,并计划使用 Virtual Toolbox for Windows 并成功执行本指南 https://docs.docker.com/get-started/part2/

【问题讨论】:

    标签: java maven docker spring-boot


    【解决方案1】:

    我想知道您指的是哪些存储库? takari 插件和 spotify 插件都可以在 maven Central 中使用,因此不需要在您的 pom.xml 中配置存储库。还是您将它们添加到您的 settings.xml 中?您可以尝试从您的项目中简单地删除存储库吗?

    Maven 区分依赖项和插件。所以你有这两者的源(下载它们的存储库),这意味着存储库和 pluginRepositories。如今,公司将使用像 nexus 或 artifactory 这样的镜像/代理,因此差异不是直接可见的 - 您只需配置镜像并将所有存储库指向那里。

    所以要使用插件,必须配置一个包含该插件的 pluginRepository。请参阅settings.xml 文档。 由于您所需要的只是在 maven Central 中,因此默认配置应该可以正常工作而无需再做任何事情。因此,只需从您的 pom.xml 或 settings.xml 中删除所有存储库

    您得到的 docker 错误似乎与 maven 或插件无关,它根本无法与您的 docker 主机通信。也许移植是错误的,或者您正在运行与插件不兼容的 docker 版本,或者它没有运行? Docker for Windows 可能需要您expose the daemon without TLS

    希望这对您有所帮助:)

    【讨论】:

    • 感谢您的回答。可悲的是,因为我对此很陌生,所以我并不了解所有内容。首先,我没有使用 settings.xml,其次,即使在一个根本没有引用存储库的项目中,它也不起作用。错误消息中指定的已检查存储库为:[local (C:\Users\USERNAME\.m2\repository), central (repo.maven.apache.org/maven2)]
    • 到第二部分:我设法使用 Docker 快速启动终端在其中执行 ./mvnw install dockerfile:build 构建了 dockerfile,这可能是 Docker 找到连接所必需的吗?出于明显的原因,我自己没有添加 maven 包装器,我在指南的“完整”版本中这样做了。如果需要,还有其他方法可以获取包装器吗?
    • 嗯。使用 mvn 和 mvnw 包装器尝试“mvn help:effective-settings”和“mvn help:effective-pom”并比较结​​果。除非某些配置在某处不同,否则它们的行为应该相同。
    【解决方案2】:

    我有同样的问题。 HttpHostConnectException 你必须在你的机器上运行 docker deamon。

    【讨论】:

      【解决方案3】:

      也许你可以配置环境变量。

      【讨论】:

        猜你喜欢
        • 2021-03-31
        • 2018-09-03
        • 2021-11-30
        • 2021-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-03
        • 1970-01-01
        相关资源
        最近更新 更多