关于这个问题还有很多 其他 问题 ,我已经查看了我在谷歌搜索中可以找到的关于此错误消息的所有资源,但没有一个对我有用。
我正在使用 Jenkins 作业来自动化容器的构建/推送。为此,我正在使用“执行 Shell”构建步骤,并在其中执行我所有的 Docker 配置(我尝试使用管道,但那些只是在我团队的 Jenkins 配置中不起作用;考虑它们之外这个问题的范围)。该作业首先克隆一个 git 存储库 ( myrepo),然后我有一个 shell 脚本编写了一些我想要包含在 Docker 容器中的文件 (例如run.sh),以及一个 Dockerfile。
到构建失败时,我的 Jenkins 工作区的文件夹结构如下:
|-- myrepo/
| |-- myexe # executable file
| |-- testfiles/
| | |-- file1.txt
| | |-- file2.txt
| | |-- ...
|-- run.sh
|-- Dockerfile
Run Code Online (Sandbox Code Playgroud)
我没有.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"]
Run Code Online (Sandbox Code Playgroud)
现在,在 Jenkins 上,我在“执行 Shell”构建步骤中执行这一切,在之前导入了 repo 之后。我创建run.sh并Dockerfile在此步骤中使用echo和输出重定向。在 Jenkins 的“Execute 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} .
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,构建在该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
Run Code Online (Sandbox Code Playgroud)
我见过的其他问题都没有提供帮助的解决方案。我的文件存在于本地,构建失败后我可以在 Jenkins 工作区中看到这些文件。我的文件本地存在于.目录中,我可以通过在命令之前放置pwd和来确认。我没有文件,所以 Docker 不应该忽略任何东西。但是我一定错过了一些东西,因为无论我想尝试什么,它仍然无法正常工作。lsdocker build.dockerignore
我在看什么?
(Docker 版本是Docker version 18.09.7, build 2d0083d)
你的评论# fails on this line是问题。根据 Docker 文档:
Docker 将以 # 开头的行视为注释,除非该行是有效的解析器指令。一行中任何其他位置的 # 标记被视为参数。
更多信息:https : //docs.docker.com/engine/reference/builder/#format
| 归档时间: |
|
| 查看次数: |
8378 次 |
| 最近记录: |