根据分配的端口停止并删除 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
下面的代码将停止并删除一个 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