当我从dockerfile构建映像时,为什么git clone失败了?

时间:2016-10-26 23:49:26

标签: docker

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

1 个答案:

答案 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)。