为什么我的dockerfile不复制目录

ste*_*han 2 docker

在我的dockerfile中,我有这两行:

ADD /ansible/inventory /etc/ansible/hosts
ADD /ansible/. /ansiblerepo
Run Code Online (Sandbox Code Playgroud)

第一行有效,因为我可以运行容器并查看主机文件已填充了清单文件中的所有ip。

第二行似乎没有用。我只是想复制ansible的所有文件/子目录,然后将它们复制到新容器内的ansiblerepo目录中。

生成映像时没有错误,但是ansiblerepo同样只是一个空目录,没有任何内容被复制到该目录。我认为我只是缺少反斜线之类的东西。

BMi*_*tch 5

Docker ADDCOPY命令直接相对于构建工作,并且仅适用于该目录中未被.dockerignore文件排除的文件。原因是构建实际上在docker主机上运行,​​该主机可能是远程计算机。a的第一步docker build .是打包目录中的所有文件(在本例中为.),并将它们发送到主机以运行您的构建。您提供的任何绝对路径都被解释为相对于构建目录,而您所引用的任何未发送到服务器的内容都将被解释为丢失的文件。

解决方案是将/ ansible复制到构建目录(通常与Dockerfile相同的文件夹)。


R0M*_*RMY 4

从源目录中删除尾随/.应该可以修复该ADD命令。

与此相关的是,如果您不需要 URL 下载功能,Docker 最佳实践建议使用COPYover 。ADD