Попытка запустить докер-контейнер через bash-скрипт. Мне нужно, чтобы контейнер запускался и выходил, как только он запускается в скрипте bash, поэтому я буду отмечать время, затраченное на запуск контейнера. Изображение представляет собой tar-файл, скопированный с другого компьютера с использованием техники сохранения и загрузки. Может запустить контейнер из образа в терминале, но не в сценарии оболочки, используя команду docker. Запустите команду -it imageId. Отображается ошибка "docker: ответ об ошибке от демона: во время выполнения OCI не удалось создать: container_linux.go процесс запуска вызвал не найденный исполняемый файл в $ PATH: неизвестно. Помощь высоко ценится. Спасибо
tl_start=$(date +%s)
docker load>alpine.tar
tl_end$(date +%s)
tl_load=$((tl_end-$tl_start))
image_id=$(docker images -a | awk '$2 ~/none/print{print $3}')
ts_start=$(date +%s)
docker run -i -d alpine:latest $image_id
Похоже на использование перенаправления неправильно (вывод docker load
перенаправленный к alpine.tar
):
docker load>alpine.tar
Я предложил бы, чтобы Вы загрузили alpine.tar
от другой машины снова (так как это могло быть повреждено теперь) и затем используют docker load -i alpine.tar
вместо этого.
Так как изображение не загружается правильно, оно объяснило бы, почему создать команда перестала работать и $image_id
недопустимо. Я предложил бы добавить проверку это image_id
правильно установлен.
Измерение времени начала контейнера только, на когда docker run
возвраты к оболочке не были бы истинной мерой времени начала. От docker run
документация:
--detach , -d Run container in background and print container ID
Это означает, что будет работать в фоновом режиме и просто потому что это возвращается к оболочке, не означает, что контейнер на самом деле полностью в порядке.
Вы также используете $image_id
как название контейнера Вы запускаете, и я предполагаю, что Вы хотите запустить контейнер с действительного образа, который Вы просто загрузили. Это имело бы больше смысла с чем-то как:
docker run -i -d $image_id test_container
Я вместо этого предложил бы иметь a HEALTHCHECK
или ENTRYPOINT
инструкция в Dockerfile, который распечатал бы что-то, когда это на самом деле полностью в порядке.
Возможно остановиться/выйти контейнер непосредственно путем определения entrypoint сценария, являющегося оболочкой и затем отправить команду в ту оболочку, в этом случае exit
:
docker run -it -d --entrypoint=/bin/sh alpine:latest exit
В Вашем случае необходимо, вероятно, использовать $image_id
вместо alpine:latest
.