"Команда не указана" из повторно импортированного образа/контейнера docker

Я пытаюсь взять контейнер docker с одной машины и запустить его на другой и сталкиваюсь с этой ошибкой: "Ответ об ошибке от демона: Команда не указана".

Ниже приведен упрощенный пример, показывающий проблему:

docker --versionDocker version 1.10.1, build 9e83765docker pull ubuntudocker run --name u1 -dit ubuntu:latestdocker export -o exported u1docker stop u1docker rm u1docker import exported ubuntu:importeddocker run --name u1 -dit ubuntu:importeddocker: Error response from daemon: No command specified.

В этом примере мы сначала извлекаем образ (ubuntu) и успешно создаем / запускаем контейнер u1 от этого. Затем мы экспортируем этот контейнер в файл (exported), остановите/удалите контейнер, импортируйте файл в новое изображение (ubuntu:imported) и попробуйте запустить из него новый контейнер. Это терпит неудачу.

docker export экспортирует не все данные о контейнере — только файловую систему. Таким образом, при импорте дампа обратно в новый образ docker необходимо указать дополнительные флаги для воссоздания контекста.

Например, если исходный контейнер работал нормально, потому что файл Dockerfile, который использовался для создания его образа, имел CMD ["/usr/bin/supervisord"] в нем, затем импортируйте свой дамп таким образом:

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

Вы можете использовать docker load команда для загрузки изображений из архивного файла . эта команда импортирует файл изображения и аргументы вместе.

Получил эту ошибку при попытке экспортировать и импортировать docker microsoft/mssql-server-linux.

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

Команды для экспорта и импорта:

docker export --output "C:\Users\oscar\Desktop\sqlTestMS.tar" msSQLdocker import "C:\Users\oscar\Desktop\sqlTestMS.tar" mssql

Однако мы не смогли найти команду для его запуска. Решение заключалось в перечислении всех контейнеров на экспортирующей машине и просмотре выполненной команды.

docker ps

enter image description here

Оттуда мы могли бы узнать, как выполнить правильную команду:

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

Когда вы экспортируете контейнер, он теряет собственную историю, которая содержит слои изображения и метаданные. Таким образом, ваш контейнер потерял свои pid-состояния.

Каждый контейнер должен иметь начальный (корневой) процесс. Вы переопределяете точку входа по умолчанию в dockerfile как bash. [отредактировано] Я думаю, что даже вы не переопределяете, что он использует значение по умолчанию, не определенное в базовом образе ubuntu. Таким образом, вы должны начать свой первоначальный процесс с помощью команды cmd. Я думаю, что ошибки нет. Это функция dockerfile для повторного использования.

при использовании import

docker save nginx:alpine | ssh rmeote-host docker import -sha256:f6098fc18511abbbfe9e52ed0d0ccc1fbe4f7b018ee1cd85392999aa92ebba1b# we see errorsdocker container run -d -p 2020:80  nginx:alpinedocker: Error response from daemon: No command specified.See 'docker run --help'.

при использовании load

docker save nginx:alpine | ssh remote-host "cat - | docker load"Loaded image: nginx:alpinedocker container run --name nginx -dp 2020:80 nginx:alpine7cc8836bef1e276f8aa986a09186e9e227542be3b094b082b9ab1f6d3c290a99docker psCONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS        PORTS                                   NAMES7cc8836bef1e   nginx:alpine   "/docker-entrypoint.…"   2 seconds ago   Up 1 second   0.0.0.0:2020->80/tcp, :::2020->80/tcp   nginx

Заставил его работать с помощью этих дополнительных шагов:

  1. Создайте Dockerfile следующим образом:

    FROM ubuntu:importedENTRYPOINT bash
  2. Создайте новый образ:

    docker build -t ubuntu:importedwithdockerfile .
  3. Теперь он будет работать:

    docker run --name u1 -dit ubuntu:importedwithdockerfile

Однако до сих пор неясно, почему простое экспортированное, а затем импортированное изображение не работает сразу. Это ошибка?