我想从一台机器拿一个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
得到它与这些额外的步骤一起工作:
创buildDockerfile如下:
FROM ubuntu:imported ENTRYPOINT bash
build立新的形象:
docker build -t ubuntu:importedwithdockerfile .
现在它将运行:
docker run --name u1 -dit ubuntu:importedwithdockerfile
但是,目前还不清楚为什么简单地导出,然后导入的图像不能马上工作。 这是一个错误?