Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
大都会/bin/bash:没有这样的文件;从头开始构建docker映像时_Bash_Docker_Dockerfile - Fatal编程技术网

大都会/bin/bash:没有这样的文件;从头开始构建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

我正试图在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.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