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

stop and remove docker container based on Port assigned

下面的代码将停止并删除一个 Docker 容器 -

docker rm -f CONTAINER_ID

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

我正在寻找一种方法将这两个代码捆绑成一个,并将 PORT 作为变量,这样我就不需要手动输入从 [= 获得的容器 ID 13=].

有没有可能?

试试这个:

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

第一个命令列出了 运行 个容器,但仅输出容器 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 }')
  echo "Found Container ID: ${ID}"
  echo "Stopping and removing it"
  docker container stop ${ID} && docker container rm ${ID}
done