Я пытаюсь взять контейнер докера с одного компьютера и запустить его на другом, но обнаружил следующую ошибку: "Ответ об ошибке от демона: команда не указана".
Ниже приведен упрощенный пример, показывающий проблему:
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
не экспортирует все о контейнере - только файловую систему. Таким образом, при импорте дампа обратно в новый образ докера необходимо указать дополнительные флаги для воссоздания контекста.
Например, если исходный контейнер работал нормально, потому что файл Dockerfile, который использовался для создания его образа, имел CMD ["/usr/bin/supervisord"]
в нем, затем импортируйте свой дамп следующим образом:
docker import \
--change 'CMD ["/usr/bin/supervisord"]' \
path/to/dump.tar imagename:tagname
ты можешь использовать docker load
команда для загрузки изображений из архивного файла. эта команда импортирует файл изображения и аргументы вместе.
Получил эту ошибку при попытке экспортировать и импортировать докер 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
Когда вы экспортируете контейнер, он теряет собственную историю, которая содержит слои изображений и метаданные. Итак, ваш контейнер потерял свои состояния pid.
У каждого контейнера должен быть начальный (корневой) процесс. Вы отменяете точку входа по умолчанию в файле докеров как bash. [отредактировано] Я думаю, что даже вы не переопределите, он использует значение по умолчанию, не определенное в базовом образе ubuntu. Итак, вы должны начать свой первоначальный процесс с помощью команды cmd. Думаю, бага нет. Это функция dockerfile для повторного использования.
Получил работу с помощью следующих дополнительных шагов:
Создайте Dockerfile следующим образом:
FROM ubuntu:imported
ENTRYPOINT bash
Создать новый образ:
docker build -t ubuntu:importedwithdockerfile .
Теперь он запустится:
docker run --name u1 -dit ubuntu:importedwithdockerfile
Однако до сих пор неясно, почему просто экспортированное, а затем импортированное изображение сразу не работает. Это ошибка?