Я пытаюсь взять контейнер 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 ps
Оттуда мы могли бы узнать, как выполнить правильную команду:
docker run --name msSQL -p 1401:1433 -d mssql:latest /opt/mssql/bin/sqlservr
Когда вы экспортируете контейнер, он теряет собственную историю, которая содержит слои изображения и метаданные. Таким образом, ваш контейнер потерял свои pid-состояния.
Каждый контейнер должен иметь начальный (корневой) процесс. Вы переопределяете точку входа по умолчанию в dockerfile как bash. [отредактировано] Я думаю, что даже вы не переопределяете, что он использует значение по умолчанию, не определенное в базовом образе ubuntu. Таким образом, вы должны начать свой первоначальный процесс с помощью команды cmd. Я думаю, что ошибки нет. Это функция dockerfile для повторного использования.
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