我试图从一台机器上获取一个 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)并u1
从中成功创建/运行容器。然后我们将该容器导出到文件(exported
),停止/删除容器,将文件导入新图像(ubuntu:imported
)并尝试从中运行新容器。它失败。
docker export
不会导出关于容器的所有内容——只是文件系统。因此,当将转储导入新的 docker 映像时,需要指定额外的标志来重新创建上下文。例如,如果原始容器运行良好,因为用于创建其映像的 Dockerfile 包含在其中,则以
CMD ["/usr/bin/supervisord"]
这种方式导入您的转储:您可以使用
docker load
命令从存档文件加载图像。此命令将一起导入图像文件和 args。尝试导出和导入 docker 时出现此错误
microsoft/mssql-server-linux
。https://hub.docker.com/r/microsoft/mssql-server-linux/
导出和导入命令:
但是我们找不到运行它的命令。解决方案是列出导出机器上的所有容器并查看运行的命令。
从那里我们可以找到如何运行正确的命令:
当您导出容器时,它会丢失包含图像层和元数据的自己的历史记录。所以你的容器失去了它的 pid 状态。
每个容器都应该有一个初始(根)进程。您将 dockerfile 上的默认入口点覆盖为 bash。[已编辑] 我认为即使您不覆盖它也使用默认值,而不是在 ubuntu 基础映像中定义。因此,您应该使用 cmd 命令开始您的初始过程。我认为没有错误。它是一个可重用的 dockerfile 功能。
得到它与这些额外的步骤一起工作:
创建 Dockerfile 如下:
构建新图像:
现在它将运行:
但是,目前还不清楚为什么简单地导出然后导入的图像不能立即工作。这是一个错误吗?
如果使用
import
如果使用
load