编辑以提供 MRE:
重现的步骤(现在使用 Docker CLI 进行重现)
project_directory
Dockerfile
directory_to_cd_into
gradlew
Dockerfile:
From debian:9
RUN cd /directory_to_cd_into
# also tried RUN cd ./directory_to_cd_into
运行docker build
产量/bin/sh: 1: cd: can't cd to /directory_to_cd_into
所以问题是cd
——这意味着我必须遗漏一些关于容器目录结构的基本知识。
也试过WORKDIR
很高兴添加更多信息。
原来的:
在我的容器中,我可以使用 grade 成功构建,如下所示:
cd directory/with/gradlew && chmod +x gradlew && ./gradlew build
但是当我把它放在我的 Dockerfile 中并尝试构建容器时,它会因为“文件或目录 gradlew 不存在”而失败:
RUN cd directory/with/gradlew && chmod +x gradlew && ./gradlew build
.
从这个问题,Unable to change directory while building docker Image using Dockerfile,我知道cd
每条RUN
语句都会重置——但我是在一个RUN
.
此RUN
语句之前的所有内容都保持不变,即,如果我注释掉 RUN,并从图像中的命令行交互式构建,它构建得很好。
如果重要的话,我会在 GitHub 代码空间内完成所有这些工作;我没有直接使用 Docker CLI。
我究竟做错了什么?
--
编辑: 我必须尝试cd
从构建上下文之外包含/目录。我不确定如何解决这个问题——也许用COPY
?