从重新导入的Docker映像/容器“未指定命令”


16

我试图从一台机器上获取一个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),然后尝试从中运行新容器。它失败。

Answers:


17

docker export不会导出有关容器的所有内容,而只是导出文件系统。因此,将转储导入回新的Docker映像时,需要指定其他标志来重新创建上下文。

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

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

2
您可以docker inspect imagename:tagname比较原始的和导入的。我有没有运气import/ export--change,虽然一切工作细save/ load
Earcam '19

2

尝试导出和导入docker时出现此错误microsoft/mssql-server-linux

https://hub.docker.com/r/microsoft/mssql-server-linux/

导出和导入命令:

docker export --output "C:\Users\oscar\Desktop\sqlTestMS.tar" msSQL

docker import "C:\Users\oscar\Desktop\sqlTestMS.tar" mssql

但是,我们找不到运行它的命令。解决方案是列出出口机器上的所有容器,然后查看运行的命令。

docker ps

在此处输入图片说明

从那里我们可以找到如何运行正确的命令:

docker run --name msSQL -p 1401:1433 -d mssql:latest /opt/mssql/bin/sqlservr

1

导出容器时,它会丢失自己的历史记录,其中包含图像图层和元数据。因此,您的容器丢失了其pid状态。

每个容器都应该有一个初始(根)过程。您正在将dockerfile上的默认入口点作为bash覆盖。[编辑]我想,即使您不重写它,也使用default,但未在ubuntu基本映像中定义。因此,您应该使用cmd命令开始初始过程。我认为没有错误。它是用于重用的dockerfile功能。


我将替代方法中的入口点仅覆盖了原始问题。在导出/导入期间,没有任何内容被覆盖。
Greendrake '16

嗨@DrakeES我的答案刚刚更新。我向您解释出口集装箱时会发生什么。
pmoksuz

0

可以通过以下附加步骤进行操作:

  1. 如下创建Dockerfile:

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

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

    docker run --name u1 -dit ubuntu:importedwithdockerfile
    

但是,仍然不清楚为什么只是先导出然后导入的图像不能立即生效。这是一个错误吗?


-1

您可以使用docker load命令从存档文件加载图像。此命令将导入图像文件和args在一起。


1
在这种情况下,什么是“归档”文件以及如何创建它?
Greendrake '18

2
@Greendrake docker loaddocker save上容器的图像(从中创建容器)进行操作,而docker importdocker export操作容器。
迈克尔·汉普顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.