我试图建立一个图像与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/
中的DockerfileFROM 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"