Команда запуска Docker не работает в скрипте bash

Попытка запустить докер-контейнер через 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
0
задан 11 July 2019 в 14:07

1 ответ

Похоже на использование перенаправления неправильно (вывод 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.

0
ответ дан 24 October 2019 в 00:12

Другие вопросы по тегам:

Похожие вопросы: