首页 > 解决方案 > 我可以通过暴露的端口停止 docker 容器吗?

问题描述

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

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

标签: dockerworkflow

解决方案


假设您可以运行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

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

stopByPort.sh 3306

推荐阅读