有许多其他问题与此问题有关,我已查看了谷歌搜索中可以找到的所有与此错误消息相关的资源,但它们对我都没有起作用。
我正在使用Jenkins工作来自动构建/推送容器。为此,我使用“执行Shell”构建步骤,并在其中进行所有Docker配置(我尝试使用管道,但这些在我的团队的Jenkins配置中不起作用;请将其视为超出本问题的范畴)。该作业首先克隆一个git仓库(myrepo
),然后我有一个shell脚本编写了许多我想包含在Docker容器中的文件(例如run.sh
),以及一个Dockerfile。
在构建失败时,我的Jenkins工作区的文件夹结构如下:
|-- myrepo/
| |-- myexe # executable file
| |-- testfiles/
| | |-- file1.txt
| | |-- file2.txt
| | |-- ...
|-- run.sh
|-- Dockerfile
我没有.dockerignore
文件。
当构建失败时,Dockerfile的内容如下:
FROM centos
USER root
# create directories
RUN mkdir -p /opt/dir1/myexe
# copy shell script
COPY run.sh /usr/bin/runprog
# copy executable
COPY myrepo/myexe /opt/dir1/myexe/ # fails on this line
COPY myrepo/testfiles /opt/dir1/myexe/
# final setup
WORKDIR /opt/dir1/myexe/
CMD ["/opt/dir1/myexe/myexe"]
现在,在Jenkins上,我在“执行Shell”构建步骤中执行这一切,之前已导入了代码库。我在此步骤中使用echo和输出重定向创建run.sh和Dockerfile。在Jenkins的“执行Shell”构建步骤中执行的shell脚本如下所示:
echo '#!/bin/sh
...
' > run.sh
echo 'FROM centos
...
' > Dockerfile
docker system prune -af
docker images # I can confirm from logs that no images remain
docker build -t containername:${DOCKER_IMAGE_TAG} .
但是当我运行这个命令时,构建会在那个
docker build
命令上失败:Step 5/8 : COPY myrepo/myexe /opt/dir1/myexe
COPY failed: stat /var/lib/docker/tmp/docker-builder190297994/opt/dir1/myexe: no such file or directory
我看到的其他问题都没有帮助的解决方案。我的文件存在本地,构建失败后我可以在Jenkins工作空间中看到它们。我的文件存在于本地 .
目录中,我可以通过在docker build
命令之前输入pwd
和ls
确认。我没有.dockerignore
文件,所以Docker不应该忽略任何内容。但是我肯定错过了什么,因为无论我尝试什么,它仍然无法正常工作。
我忽略了什么?
(Docker版本是Docker version 18.09.7, build 2d0083d
)
Dockerfile
相同的目录中吗?换句话说,尝试cd <path/to/Dockerfile>; cp myrepo/myexe ./
。我知道Dockerfiles不能使用COPY
命令复制位于Dockerfile
目录之外的文件/目录,但我不确定是否也适用于Dockerfile目录中的子目录,因此提出了我的建议。 - Perplexabotcp myrepo/myexe myexe
然后在 Dockerfile 中执行了COPY myexe ...
)。不幸的是,它没有起作用。 - Green Cloak GuyDockerfile
完全相同的副本,出现了相同的错误。有趣。 - Perplexabot# fails on this line
,然后一切都正常了。把它删掉再试一次!!! - Perplexabot