为什么使用docker compose构建和镜像失败,但没有它却成功?



我试图建立一个图像与docker组成,它失败了,但它的工作只是docker。我读过一些SO帖子说,当Dockerfile中找不到文件/文件夹时,失败时会抛出错误。当使用docker构建时,构建工作,所以我不知道为什么它不能使用docker-compose。为什么会发生这种情况?

这个项目的结构如下:

parent_proj
|_proj
|_Dockerfile
|_docker-compose.yml

这是我的docker-compose文件:

version: '3.4'
services:
integrations:
build:
context: .
dockerfile: proj/Dockerfile
network: host
image: int
ports:
- "5000:5000"

下面是proj/

中的Dockerfile
FROM openjdk:11
USER root
#RUN apt-get bash
ARG JAR_FILE=target/proj-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} /app2.jar
ENTRYPOINT ["java","-jar", "/app2.jar"]

当我在proj文件夹中。我可以运行

docker build . -t proj

以上操作成功,随后可以运行容器。然而,当我在parent_proj和运行docker compose build失败的错误信息

未能计算缓存键:未能走/var/lib/docker/tmp/buildkit-mount316454722/目标:lstat/var/lib/docker/tmp/buildkit-mount316454722/target:没有这样的文件或目录

为什么会发生这种情况?我怎样才能成功地构建与docker撰写不重组项目?

感谢

您的Compose构建选项和您显示的docker build选项不同。成功的命令(-f Dockerfile是默认):

docker build ./proj   -t proj    # -f Dockerfile
#            context:    image:       dockerfile:

但是你的撰写设置正在运行

docker build .         -t img     -f proj/Dockerfile
#            context:     image:     dockerfile:

哪一个是正确的?在Dockerfile中,

COPY target/proj-0.0.1-SNAPSHOT.jar /some/container/path

target/...源路径总是相对于构建上下文目录(组成context:选项,目录参数为docker build),即使它看起来像一个绝对路径,即使Dockerfile在不同的目录中。如果target目录是proj的子目录,那么您需要第一个表单。

如果您只需要指定上下文目录,则有一个简短的Composebuild:语法,我将在这里使用它。如果你不特别关心图像名称是什么(你没有把它推送到注册表),那么Compose可以自己选择一个合理的名称;你不需要指定image:.

version: '3.8'
services:
integrations:
build: ./proj
ports:
- "5000:5000"

相关内容

  • 没有找到相关文章

最新更新