我可以通过其暴露的端口来停止 Docker 容器吗?

muu*_*uuv 5 workflow docker

我的计算机上有大约两到六个带有 docker 的项目,有时我会并行使用这些项目,并且每次我想使用另一个项目时都必须手动停止一些容器(mariadb、mongodb、php、nginx、apache)。有没有办法通过其端口停止这些容器,这样我就可以简单地docker stop -p 3306将其添加到我的 Makefilestop部分?如果没有,我应该采取什么方式来优化这个工作流程。

我正在使用 macOS 10.14.x 和 Docker 桌面 v18.09.2 的 Mac。

b0g*_*usb 6

假设您可以运行bash一种方法来执行此操作,即编写一个小脚本:

#!/usr/bin/env bash

for id in $(docker ps -q)
do
    if [[ $(docker port "${id}") == *"${1}"* ]]; then
        echo "stopping container ${id}"
        docker stop "${id}"
    fi
done
Run Code Online (Sandbox Code Playgroud)

docker ps -q将列出正在运行的容器的 ID。如果端口映射包含传入的参数,则会停止容器。将脚本放入其中PATH,您可以在任何地方执行它:

stopByPort.sh 3306
Run Code Online (Sandbox Code Playgroud)