如何从Spring Boot jar构建DockerImage



我正在尝试从一个简单的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 映像",如此处的说明中所述

./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 文档中阅读它,但没有提到这一点。

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

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

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

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

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

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命令运行它

当你运行命令时:

docker build -t demo:1 .

在字符串"demo:1"中,demo是repository名称,冒号"1"之后的字符串是图像tag,最后的点(.)表示当前目录build context您的Dockerfile所在的位置。

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

docker build -t demo .

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

最新更新