为什么退出的docker conatiner没有被删除?

为什么退出的docker conatiner没有被删除?,docker,docker-container,docker-image,Docker,Docker Container,Docker Image,文件名:dockerHandler.sh #!/bin/bash set -e to=$1 shift cont=$(docker run -d "$@") code=$(timeout "$to" docker wait "$cont" || true) docker kill $cont &> /dev/null docker rm $cont echo -n 'status: ' if [ -z "$code" ]; then echo timeout else

文件名:dockerHandler.sh

#!/bin/bash
set -e
to=$1
shift
cont=$(docker run -d "$@")
code=$(timeout "$to" docker wait "$cont" || true)
docker kill $cont &> /dev/null
docker rm $cont
echo -n 'status: '
if [ -z "$code" ]; then
    echo timeout
else
    echo exited: $code
fi
echo output:
# pipe to sed simply for pretty nice indentation
docker logs $cont | sed 's/^/\t/'
docker rm $cont &> /dev/null
但每当我在运行docker映像后检查docker容器状态时,它都会给出已退出docker容器的列表

命令:docker ps-as

因此,要删除这些已退出的容器,我将在下面的命令下手动运行


rm$(docker ps-a-f status=exited-q)

您应该在docker命令中添加标志
--rm

来自Docker man:

➜  ~ docker run --help | grep rm
  --rm             Automatically remove the container when it exits

您应该将标志
--rm
添加到docker命令:

来自Docker man:

➜  ~ docker run --help | grep rm
  --rm             Automatically remove the container when it exits
删除的行
docker kill$cont&>/dev/null
码头工人rm$cont
docker日志$cont|sed's/^/\t/'

在Mac中使用gtimeout而不是timeout,工作正常

要在Mac上安装gtimeout,请执行以下操作:

Installing CoreUtils
brew install coreutils
In line 8 of DockerTimeout.sh change timeout to gtimeout
删除的行
docker kill$cont&>/dev/null
码头工人rm$cont
docker日志$cont|sed's/^/\t/'

在Mac中使用gtimeout而不是timeout,工作正常

要在Mac上安装gtimeout,请执行以下操作:

Installing CoreUtils
brew install coreutils
In line 8 of DockerTimeout.sh change timeout to gtimeout

您的脚本是否成功运行到完成?它是否输出任何错误或警告?脚本是否成功运行到完成?它是否输出任何错误或警告?我已经尝试过了,cont=$(docker run-d--rm“$@”)。在执行完成之前,已退出的容器将被删除。请建议看起来您的脚本没有成功完成,或者在执行过程中出现错误<代码>--rm不应在执行完成之前删除容器。您可以共享脚本的完整输出吗?我已经尝试过了,cont=$(docker run-d--rm“$@”)。在执行完成之前,已退出的容器将被删除。请建议看起来您的脚本没有成功完成,或者在执行过程中出现错误<代码>--rm不应在执行完成之前删除容器。你能分享脚本的完整输出吗?