根据分配的端口停止并删除Docker容器

时间:2019-06-22 21:04:34

标签: docker docker-container

以下代码将停止并删除Docker容器-

docker rm -f CONTAINER_ID

但是它需要 Container ID ,我从运行另一个代码docker ps来获取使用典型端口的ID(例如例如0.0.0.0:8383-> PORTS 列中的8383 / tcp

我正在寻找一种方法,将这两个代码捆绑在一起,并以 PORT 作为变量,这样一来,我就无需手动提供从PORTS获得的容器ID。 / p>

有没有可能?

1 个答案:

答案 0 :(得分:0)

尝试一下:

PORT=8383
docker container ls --format="{{.ID}}\t{{.Ports}}" |\
grep ${PORT} |\
awk '{print $1}'

第一个命令列出了正在运行的容器,但仅输出容器ID和端口。结果通过管道传递到grep中,以获取感兴趣的容器。 awk命令获取容器ID。

测试

  • :7777:8888:9999上创建3个Nginx容器。
  • 然后,按其端口查找容器,停下来并卸下它们。
for PORT in 7777 8888 9999
do
  docker run --detach --publish=${PORT}:80 nginx
done

docker container ls

for PORT in 7777 8888 9999
do
  echo "Looking for a container on port: ${PORT}"
  ID=$(\
    docker container ls --format="{{.ID}}\t{{.Ports}}" |\
    grep ${PORT} |\
    awk '{print $1}')
  echo "Found Container ID: ${ID}"
  echo "Stopping and removing it"
  docker container stop ${ID} && docker container rm ${ID}
done