如何使用 fabric8 docker-maven-plugin 从 Dockerfile 构建 docker 图像?
How just build docker image from Dockerfile with fabric8 docker-maven-plugin?
这是一个插件定义:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.26.0</version>
<configuration>
<registry>000000000000.dkr.ecr.us-east-1.amazonaws.com/my-aws-registy-0000000000000:latest</registry>
<images>
<image>
<name>my-image</name>
<build>
<tags>
<tag>000000000000.dkr.ecr.us-east-1.amazonaws.com/my-aws-registy-0000000000000:latest</tag>
</tags>
<dockerFileDir>${project.build.directory}</dockerFileDir>
</build>
</image>
</images>
</configuration>
</plugin>
在资源阶段 Dockerfile
被复制到 target
之后。当我尝试调用 docker:build
目标时,我得到:
[ERROR] Failed to execute goal io.fabric8:docker-maven-plugin:0.25.2:build (default-cli)
on project my-project: Execution default-cli of goal
io.fabric8:docker-maven-plugin:0.25.2:build failed: A tar file cannot include itself. -> [Help 1]
我想要的 - 只需简单地通过 maven 执行 docker build -t .
命令 无需 任何插件 packaging/building/assembly 目标(或子目标)。
是的,这个插件有很多可能性,但我只需要 docker 构建而不需要任何 tar
存档,这必须从 target
文件夹中完成。
怎么做???
docker 所做的是 assemble 所有应该添加到图像中的文件到 tar 文件中,并将其发送到 docker 守护进程以构建图片。
该插件在 target
文件夹(即您的 ${project.build.directory}
)的子目录中创建此 tar 文件。将 target 文件夹作为 docker 插件的基础隐式包含创建的 tar 文件,因此会出现错误。
我在一个项目中所做的是将所有应该添加到图像(ADD
/COPY
)和Dockerfile
的文件复制到${project.build.directory}/dockerfile
目录,然后使用 <dockerFileDir>${project.build.directory}/dockfile</dockerFileDir>
创建图像
为什么不使用 exec-maven-plugin 来调用 docker 本身?
我遇到了和你一样的问题,发现如果我将 Dockerfile 放在目标文件夹之外,它就可以工作,例如
<dockerFile>${project.basedir}/Dockerfile</dockerFile>
这是一个插件定义:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.26.0</version>
<configuration>
<registry>000000000000.dkr.ecr.us-east-1.amazonaws.com/my-aws-registy-0000000000000:latest</registry>
<images>
<image>
<name>my-image</name>
<build>
<tags>
<tag>000000000000.dkr.ecr.us-east-1.amazonaws.com/my-aws-registy-0000000000000:latest</tag>
</tags>
<dockerFileDir>${project.build.directory}</dockerFileDir>
</build>
</image>
</images>
</configuration>
</plugin>
在资源阶段 Dockerfile
被复制到 target
之后。当我尝试调用 docker:build
目标时,我得到:
[ERROR] Failed to execute goal io.fabric8:docker-maven-plugin:0.25.2:build (default-cli)
on project my-project: Execution default-cli of goal
io.fabric8:docker-maven-plugin:0.25.2:build failed: A tar file cannot include itself. -> [Help 1]
我想要的 - 只需简单地通过 maven 执行 docker build -t .
命令 无需 任何插件 packaging/building/assembly 目标(或子目标)。
是的,这个插件有很多可能性,但我只需要 docker 构建而不需要任何 tar
存档,这必须从 target
文件夹中完成。
怎么做???
docker 所做的是 assemble 所有应该添加到图像中的文件到 tar 文件中,并将其发送到 docker 守护进程以构建图片。
该插件在 target
文件夹(即您的 ${project.build.directory}
)的子目录中创建此 tar 文件。将 target 文件夹作为 docker 插件的基础隐式包含创建的 tar 文件,因此会出现错误。
我在一个项目中所做的是将所有应该添加到图像(ADD
/COPY
)和Dockerfile
的文件复制到${project.build.directory}/dockerfile
目录,然后使用 <dockerFileDir>${project.build.directory}/dockfile</dockerFileDir>
为什么不使用 exec-maven-plugin 来调用 docker 本身?
我遇到了和你一样的问题,发现如果我将 Dockerfile 放在目标文件夹之外,它就可以工作,例如
<dockerFile>${project.basedir}/Dockerfile</dockerFile>