FROM ansible/ansible:ubuntu1604
MAINTAINER myname
RUN git clone http://github.com/ansible/ansible.git /tmp/ansible
RUN git clone http://github.com/othertest.git /tmp/othertest
WORKDIR /tmp/ansible
ENV PATH /tmp/ansible/bin:/sbin:/usr/sbin:/usr/bin:bin
ENV PYTHONPATH /tmp/ansible/lib:$PYTHON_PATH
ADD inventory /etc/ansible/hosts
WORKDIR /tmp/
EXPOSE 8888
当我从这个dockerfile构建时,我将克隆到/ tmp / ansible和othertest用红色文本(我假设是一个错误)。当我然后运行容器并仔细阅读时,我看到dockerfile中的所有步骤都是正确构建的,而不是缺少的git存储库。
我无法弄清楚我做错了什么,我假设它是一个简单的错误。
构建dockerfile:
sudo docker build --no-cache -f Dockerfile .
运行dockerfile:
sudo docker run -I -t de32490234 /bin/bash
答案 0 :(得分:4)
答案简短:
将您的文件放在/tmp
以外的任何位置,事情应该正常。
答案越久:
您的图像基于ansible/ansible:ubuntu1604
图像。如果您通过docker inspect ansible/ansible:ubuntu1604
检查此图片或查看Dockerfile from which it was built,您会发现它包含多个卷装入。 Dockerfile中的相关行是:
VOLUME /sys/fs/cgroup /run/lock /run /tmp
这意味着所有这些目录都是卷装入点,这意味着放入其中的任何数据都将不作为映像构建过程的一部分提交。
查看您的Dockerfile
,我有两条与上述无关的评论:
您明确设置了PATH
环境变量,但忽略了包含/bin
,这将导致各种问题,例如:
$ docker run -it --rm bash
docker: Error response from daemon: oci runtime error: exec: "bash": executable file not found in $PATH.
您正在使用WORKDIR
两次,但第一次(WORKDIR /tmp/ansible
)您实际上并未正在做任何关心您所在目录的内容(您只需设置一些环境变量并将文件复制到/etc/ansible
)。