大都会/bin/bash:没有这样的文件;从头开始构建docker映像时
我正试图在ubuntu-14系统中创建自己的docker映像 我的docker文件如下所示:大都会/bin/bash:没有这样的文件;从头开始构建docker映像时,bash,docker,dockerfile,Bash,Docker,Dockerfile,我正试图在ubuntu-14系统中创建自己的docker映像 我的docker文件如下所示: FROM scratch RUN /bin/bash -c 'echo "hello"' 我在运行docker build时收到错误消息。: exec:“/bin/sh”:stat/bin/sh:没有这样的文件或目录 我猜这是因为基本图像“scratch”中不存在/bin/sh。我应该如何解决这个问题?基本图像scratch不使用/bin/bash。因此,您应该改为: FROM ubuntu:14.0
FROM scratch
RUN /bin/bash -c 'echo "hello"'
我在运行docker build时收到错误消息。:
exec:“/bin/sh”:stat/bin/sh:没有这样的文件或目录
我猜这是因为基本图像“scratch”中不存在
/bin/sh
。我应该如何解决这个问题?基本图像scratch
不使用/bin/bash
。因此,您应该改为:
FROM ubuntu:14.04
RUN /bin/sh -c 'echo "hello"'
Docker基本上是一个集装箱运输工具,与虚拟机相比,它可以帮助构建系统,并在闪存中启动和运行系统,而不会占用大量资源 Docker容器基本上是一个分层容器。如果您碰巧读取了Docker文件,该文件中的每个命令都将导致在容器中创建一个新层,并且在执行Docker文件中的所有命令后,最后一层就是您的容器实际所在的层 Dockerhub上提供的图像专门针对这种环境进行了优化,并且非常易于设置和构建。如果您从头开始构建容器,即没有任何基础图像,那么您基本上拥有的是一个空容器。空容器不理解/bin/bash实际上是什么,因此它对您不起作用 Docker容器不使用底层操作系统的任何细节。多个docker容器将有效地使用相同的底层内核。就这样。没有别的了。 (但是有一个卷的概念,其中容器在本地基础系统上共享特定卷) 因此,如果您想使用/bin/bash,您需要一个基本映像,它将为您的容器设置此命令的细节,然后您可以成功地执行它
然而,建议你使用官方的Docker图片,比如Ubuntu,然后在上面安装你的定制工具。官方图片来自制造商,针对这种环境进行了高度优化。它也不起作用。你知道这是怎么发生的吗?你试过ubuntu:14.04的
吗。恐怕这是唯一的办法。我认为有一些技巧可以将/bin/bash从主机系统带到docker容器。谢谢你的帮助:)@NameTooLongException你没有抓住重点。。。。容器用于将正在运行的进程与主机系统隔离。这是一件好事。如果需要bashshell,可以在(dumb)中构建它,或者使用已经包含它的基本容器(smart)。如果你不喜欢ubuntu的话,也有像busybox这样的较轻的图片。最后,注意不要过度优化。如果使用同一个基本映像运行大量容器,该映像仍然只下载一次。与下载大量定制的基础图片相比,效率更高。感谢您的宝贵评论:)@MarkO'Connor