有many other questions about this问题,我查看了我在Google搜索中可以找到的有关此错误的所有资源消息,但没有一个对我有用。
我正在使用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上,在较早导入回购协议之后,我将在“执行Shell”构建步骤中执行所有操作。我在此步骤中使用run.sh
创建Dockerfile
和echo
并输出重定向。在詹金斯(Jenkins)的“执行外壳”(Execute 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工作区中看到。我的文件位于.
目录中的本地 中,可以通过将pwd
和ls
放在docker build
命令之前来确认。我没有.dockerignore
文件,因此Docker不应该忽略任何内容。但是我一定想念一些东西,因为不管我怎么想,它仍然无法工作。
我俯瞰什么?
(Docker版本为Docker version 18.09.7, build 2d0083d
)
答案 0 :(得分:3)
您的评论# fails on this line
是问题所在。
根据Docker文档:
Docker将以#开头的行视为注释,除非该行是 有效的解析器指令。行中其他任何地方的#号标记是 视为论点。
此处有更多信息:https://docs.docker.com/engine/reference/builder/#format