为什么我的dockerfile没有复制目录

时间:2016-10-27 03:47:10

标签: docker

在我的dockerfile中我有这两行:

ADD /ansible/inventory /etc/ansible/hosts
ADD /ansible/. /ansiblerepo

第一行有效,因为我可以运行容器并看到我的主机文件已填充了我的库存文件中的所有ips。

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

构建映像时没有错误,但ansiblerepo再次只是一个空目录,没有任何内容复制到它。我想我只是错过了一个反斜杠或什么的。

3 个答案:

答案 0 :(得分:4)

Docker public class StartingPoint { static String[] doctorNames = {"Potato", "Chocolate", "Something", "Name", "Unnamed"}; public static void main(String[] args) { ArrayList<Doctor> doctorList = new ArrayList<>(5); for (int i = 0; i < 5; i++) { doctorList.add(new Doctor(doctorNames[i], doctorNames[i] + " last name", String.valueOf(i))); } HashMap<String, String> someHashMap = getDoctorHash(doctorList); for (int i = 0; i < 5; i++) { System.out.println("The first name of the doctor number " + String.valueOf(i + 1) + " is: "); System.out.println(someHashMap.get(String.valueOf(i))); } } public static HashMap<String, String> getDoctorHash(ArrayList<Doctor> doctorList) { HashMap<String, String> hm = new HashMap<>(); for(Doctor doctor : doctorList) { hm.put(doctor.getId(), doctor.getFirstName()); } return hm; } } ADD命令直接与构建相关,并且仅针对该目录中未被COPY文件排除的文件。原因是构建实际上在docker主机上运行,​​docker主机可能是远程机器。 .dockerignore的第一步是打包目录中的所有文件(在本例中为docker build .)并将它们发送给主机以运行构建。您提供的任何绝对路径都被解释为相对于构建目录,您引用的任何未发送到服务器的路径都将被解释为丢失文件。

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

答案 1 :(得分:1)

从源目录中删除尾随=OR($R1>=8,$T1>=12) 应修复/.命令。

在相关说明中,如果您不需要网址下载功能,Docker Best Practices建议您使用ADD而不是COPY

答案 2 :(得分:1)

确保在您的“ .dockerignore”文件中没有排除所有内容。通常,dockerignore将这些行文件归档

 source("/abc@xyz.com/home/user/import.R")

这意味着除 publish empty 文件夹之外的所有内容都将被忽略。