Shell:检查docker容器是否存在

use*_*695 5 shell-script

如果出现这种情况,我如何检查 bash 脚本

sudo docker images -q nginx
Run Code Online (Sandbox Code Playgroud)

给我一个结果字符串,这意味着这个容器是存在的

sudo docker images -q nginx
if [ $? != '' ]
then
    echo "existing"
else
    echo "missing
Run Code Online (Sandbox Code Playgroud)

小智 10

我尝试过,\nas在“最佳答案”中建议,\n但它只返回图像的ID,而不是容器的ID。\xc2\xa0\nNo\xc2\xa0matter如果容器是否正在运行,它总是返回图像\xc2\xa0ID。docker images -q "{Image Name}"

\n

如果你想知道容器是否正在运行,\n你需要\xc2\xa0应用以下命令:

\n
docker ps -q -f name=" {容器名称} "
\n

如果容器存在并且正在运行,则返回容器\xc2\xa0ID。\xc2\xa0\n如果\xc2\xa0不存在,或存在但已停止,则返回空字符串。如果要搜索所有(正在运行和已停止)容器,请对“docker ps”命令使用“-a”参数,如下所示:

\n
docker ps -a -q -f name=" {容器名称} "
\n

您还可以按其他字段搜索,例如按容器 ID 搜索:

\n
docker ps -a -q -f id=" {容器ID} "
\n

有关更多详细信息,请参阅官方“docker ps”文档

\n


Kus*_*nda 7

$?不是字符串,而是sudo(在这种情况下)的退出状态。要正确使用,以进行比较反对零-gt,或使用if (( $? ))(在像贝壳bash或者ksh93,做算术评估与(( ... )))。

如果sudo docker images -q nginx在容器存在时给你一个字符串,如果不存在则给你一个字符串,那么你可以将它存储在一个变量中,看看它是否为空:

result=$( sudo docker images -q nginx )

if [[ -n "$result" ]]; then
  echo "Container exists"
else
  echo "No such container"
fi
Run Code Online (Sandbox Code Playgroud)