我正在尝试从一个简单的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映像方面存在一些根本性的误解。主要地:
- 从终端构建时,Docker 如何知道如何命名映像?
- 使用 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 和演示:最新。此外,标签"最新"并不意味着图像是最新的,它只是标签的名称。