遇见" / bin / bash:没有这样的文件"从头开始构建docker图像时

时间:2016-01-10 01:29:59

标签: bash docker dockerfile

我试图在ubuntu-14系统中创建自己的docker镜像。

我的docker文件如下所示:

FROM scratch
RUN /bin/bash -c 'echo "hello"'

运行docker build .时收到错误消息:

exec: "/bin/sh": stat /bin/sh: no such file or directory

我想这是因为/bin/sh在基本图像中不存在" scratch"。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

Docker基本上是一个容器式工具,与虚拟机相比,它有助于构建系统并在闪存中启动和运行,而不会占用大量资源。

Docker容器基本上是一个分层容器。如果您碰巧读取了Dockerfile,该文件中的每个命令都将导致在容器和最后一层中创建一个新层是Dockerfile中所有命令执行后你的容器实际上是什么。

Dockerhub上提供的图像专门针对此类环境进行了优化,并且非常易于设置和构建。如果您正在从头开始构建容器,即没有任何基本映像,那么您基本上拥有的是一个空容器。空容器无法理解 / bin / bash 实际上是什么,因此它不适合您。

Docker容器不使用底层操作系统的任何细节。多个docker容器将以有效的方式使用相同的底层内核。而已。没有其他的。 的概念,其中容器在本地底层系统上共享特定卷 < / p>

因此,如果您想使用/ bin / bash,您需要一个基本映像,它将为您的容器设置此命令的细节,然后您就可以成功执行它。

但是,建议您使用官方Docker图像说Ubuntu,然后在其上安装自定义内容。官方图片来自制造商,并且针对这种环境进行了高度优化。

答案 1 :(得分:2)

基本图片scratch不使用/bin/bash。所以你应该改为:

FROM ubuntu:14.04
RUN /bin/sh -c 'echo "hello"'