重新导入的docker镜像/容器中的“No command specified”

我想从一台机器拿一个docker容器,并在另一台机器上运行,遇到这个错误:“ 来自守护进程的错误响应:没有指定命令 ”。

以下是显示问题的简单示例:

docker --version Docker version 1.10.1, build 9e83765 docker pull ubuntu docker run --name u1 -dit ubuntu:latest docker export -o exported u1 docker stop u1 docker rm u1 docker import exported ubuntu:imported docker run --name u1 -dit ubuntu:imported docker: Error response from daemon: No command specified. 

在这个例子中,我们首先拉一个图像(ubuntu),并成功地创build/运行容器u1 。 然后,我们将该容器导出到一个文件( exported ),停止/删除容器,将文件导入到一个新的映像( ubuntu:imported ),并尝试运行一个新的容器。 它失败。

有人可以解释如何得到它的工作?

当您导出容器时,会丢失包含图像层和元数据的自己的历史logging。 所以你的容器失去了它的pid状态。

每个容器应该有一个初始(根)过程。 您将dockerfile上的默认入口点复制为bash。 我认为,即使你不重写它使用默认,没有定义在Ubuntu的基本形象。 所以你应该用cmd命令开始你的初始化过程。 我觉得没有错误。 这是一个可重复使用的dockerfilefunction。

docker export不会导出容器的所有内容 – 只是文件系统。 所以,在将转储导入到新的Docker镜像时,需要指定其他标志来重新创build上下文。

例如,如果原始容器运行良好,因为用于创build其映像的Dockerfile在其中包含CMD ["/usr/bin/supervisord"] ,则可以通过以下方式导入转储:

 docker import \ --change 'CMD ["/usr/bin/supervisord"]' \ path/to/dump.tar imagename:tagname 

得到它与这些额外的步骤一起工作:

  1. 创buildDockerfile如下:

     FROM ubuntu:imported ENTRYPOINT bash 
  2. build立新的形象:

     docker build -t ubuntu:importedwithdockerfile . 
  3. 现在它将运行:

     docker run --name u1 -dit ubuntu:importedwithdockerfile 

但是,目前还不清楚为什么简单地导出,然后导入的图像不能马上工作。 这是一个错误?