小编典典

Jenkins-Run Docker:复制失败:stat / var / lib / docker / tmp / docker-builder…:没有这样的文件或目录

jenkins

我正在使用Jenkins作业来自动化容器的构建/推送。为此,我使用“ Execute
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上,在较早导入了仓库之后,我将在“ Execute
Shell”构建步骤中执行所有这些操作。我创建run.shDockerfile在此步骤中使用echo和输出重定向。在詹金斯的“执行外壳”构建步骤中执行的外壳脚本如下所示:

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工作区中看到。我的文件存在于本地
.目录,我可以通过将确认pwdls不仅仅是之前docker build的命令。我没有.dockerignore文件,因此Docker不应该忽略任何东西。但是我必须丢失一些东西,因为无论我想尝试什么,它仍然无法正常工作。

我在俯视什么?

(Docker版本为Docker version 18.09.7, build 2d0083d


阅读 835

收藏
2020-07-25

共1个答案

小编典典

您的评论# fails on this line就是问题。根据Docker文档:

Docker会将以#开头的行视为注释,除非该行是有效的解析器指令。一行中其他任何地方的#标记均被视为参数。

此处的更多信息:https :
//docs.docker.com/engine/reference/builder/#format

2020-07-25