【问题标题】:How to build DockerImage from Spring Boot jar如何从 Spring Boot jar 构建 Docker Image
【发布时间】:2018-09-03 17:03:51
【问题描述】:

我正在尝试从一个简单的 Spring RESTful Web 服务 jar 构建一个 Docker 映像。

为此,我指定了以下 Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

我正在尝试从我的 IDEA cli 中“使用 Maven 构建 Docker 映像”,如说明 here 中所述

./mvnw install dockerfile:build

不幸的是,这引发了异常:

Could not build image: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: java.io.IOException: Permission denied

由于我不知道如何解决这个问题,我尝试使用docker 命令从终端构建图像:

$ docker build nordic/demo

创建图像但名称和标签为<none>。从 docker documentations 那里了解它,但没有提及。

我是 Docker 新手,所以我确信在如何构建 Docker 镜像方面存在一些基本的误解。主要是:

  1. 从终端构建时,Docker 如何知道如何命名映像?
  2. 使用 spotify 插件构建时,为什么/需要什么权限才能使用该插件(在构建没有帮助之前登录 dockerhub)?

感谢您的任何指示或解释!

【问题讨论】:

    标签: java spring docker spring-boot


    【解决方案1】:

    使用下面的示例命令在 /var/run/docker 中为 your_own_username 而不是 root 设置权限,然后试一试。

    sudo chown -R root:your_own_username /var/run/docker

    【讨论】:

      【解决方案2】:

      spring boot docker

      此链接将有助于使用 Spring Boot 构建您的 Docker 映像。

      <properties>
         <docker.image.prefix>springio</docker.image.prefix>
      </properties>
      <build>
          <plugins>
              <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>
      

      这个插件你要包含在你的 pom 中,你可以在属性字段中更改你的图像名称。

      如果您收到权限被拒绝错误,您必须使用 sudo 命令运行它

      【讨论】:

        【解决方案3】:

        当你运行命令时:

        docker build -t demo:1 .
        

        in string 'demo:1' demo is repository name and string after冒号 '1' is tag of image and dot (.) 最后意味着当前目录是 build context 你的 Dockerfile 是居住。

        一个存储库可以有许多图像,它们由标签唯一标识。如果你在不提供标签的情况下运行这样的命令:

        docker build -t demo .
        

        docker 将在演示存储库中创建新图像,并默认为图像附加名为“最新”的标签,因此在这种情况下,图像将是 demo:latest。并且存储库演示将有 2 个图像演示:1 和演示:最新。此外,标签“最新”并不意味着图像是最新的,它只是标签的名称。

        【讨论】:

          猜你喜欢
          • 2017-02-11
          • 2018-05-02
          • 2021-06-23
          • 1970-01-01
          • 2016-09-29
          • 2018-04-06
          • 2016-05-01
          • 2021-02-27
          • 1970-01-01
          相关资源
          最近更新 更多