docker - 从dockerfile构建镜像时,为什么git clone失败?

标签 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

最佳答案

简短的答案:

将文件放在/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)。
  • 关于docker - 从dockerfile构建镜像时,为什么git clone失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40273910/

    相关文章:

    spring - 无法从外部计算机连接到kafka

    Docker的镜像和主机不兼容

    docker - Kafka stream.allMetadata()在DOCKER中返回空列表(交互式查询)

    mysql - 如何使用已填充的数据库制作用于自动化测试的 docker 镜像?

    linux - 如何使用 API/v1.5 在 docker 容器中运行守护进程?

    django - 在一个用于CI(Bamboo)的容器中运行postgres 9.5和django

    docker - 使用 SSL 的 Nginx 子域重定向不起作用

    docker - 如何在 Docker 中回显环境变量

    docker - 使用 Concourse 的 docker 资源获取要在 docker compose 中使用的容器

    amazon-web-services - ECS与ECR自动部署