无法从头开始docker集装箱

现在我正在努力学习Docker,但仍然有一些想法不清楚; 我试图运行一个我刚刚创build的映像,这里是目录;

你好(目录):

  • Dockerfile
  • start.sh

和Dockerfile:

FROM scratch ADD start.sh /var/ CMD ["/var/start.sh"] 

start.sh:

 #!/bin/bash echo "hello world" 

我已经标记为使用:docker build -t mozer / hello。

一旦我运行命令;

 docker run mozer/hello no such file or directory Error response from daemon: Cannot start container f22019aabc81f29fe17e849a2c040902ccadefe6cb8a8fe2612c83fe8eda40ea: [8] System error: no such file or directory 

一旦我运行命令:

 docker run mozer/hello /bin/sh -c exec: "/bin/sh": stat /bin/sh: no such file or directory Error response from daemon: Cannot start container 3b54584092e70b639671aca66122a0b1f6b1e4327cb2471a8792c3b2337b0bcc: [8] System error: exec: "/bin/sh": stat /bin/sh: no such file or directory 

你能给我一些想法find解决办法吗?

PS:我正在一台没有连接到互联网的机器上工作!

FROM scratch是一个完全空的文件系统。 您没有安装的库,并且没有包含在其中的shell(如/ bin / sh)。 要使用它作为你的基础,你需要一个静态链接的二进制文件,或者你需要安装linux发行版中包含的所有普通工具。

后者是预先包装在docker集线器上的各种busybox,debian,ubuntu,centos等图像。 使您的映像以最小基本映像工作的最快方法是将from from更改为FROM busybox ,并将/bin/bash更改为/bin/sh

抓图是一个空文件系统,里面没有/ bin / sh。

看看用scratch创build一个简单的基础图像

您可以使用Docker的保留的最小图像,scratch作为构build容器的起点。 使用暂存的“映像”信号到构build过程,您希望Dockerfile中的下一个命令成为映像中的第一个文件系统层。

你可以添加一个可执行的编译程序并运行它。