尝试通过 bash 脚本运行 docker 容器。我需要容器在 bash 脚本中启动后立即启动和退出,以便我记录启动容器所花费的时间。图像是一个 tar 文件,使用保存和加载技术从另一台机器复制。可以使用 docker run -it imageId 命令从终端中的图像运行容器,但不能在 shell 脚本中运行。它显示错误“docker:Error response from daemon:OCI runtime create failed: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
。
由于图像未正确加载,它将解释为什么 create 命令失败且$image_id
无效。我建议添加一个image_id
正确设置的检查。
仅在docker run
返回外壳时测量容器的启动时间并不能真正测量启动时间。从docker run
文档:
--detach , -d Run container in background and print container ID
这意味着它将在后台运行,并且仅仅因为它返回到 shell 并不意味着容器实际上已经完全启动并运行。
您还使用$image_id
作为您正在启动的容器的名称,我猜您想使用您刚刚加载的实际图像启动一个容器。使用以下内容会更有意义:
docker run -i -d $image_id test_container
相反,我建议在 Dockerfile 中有一个HEALTHCHECK
orENTRYPOINT
指令,当它真正完全启动并运行时会打印一些东西。
可以通过将入口点脚本指定为 shell 来直接停止/退出容器,然后向该 shell 发送命令,在这种情况下exit
:
docker run -it -d --entrypoint=/bin/sh alpine:latest exit
在您的情况下,您可能应该使用$image_id
而不是alpine:latest
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句