【问题标题】:Kill a Docker Container杀死一个 Docker 容器
【发布时间】:2018-12-03 13:32:33
【问题描述】:

我已经为我的节点应用程序设置了一个 Docker 容器并使用它运行它

docker run -p 4500:4500 my_node_app

它以无守护模式启动 pm2。 CTRL+C 和退出不起作用。我在另一个终端窗口中尝试过 docker stop my_node_app 但无济于事。 感谢任何帮助。

【问题讨论】:

    标签: shell docker pm2


    【解决方案1】:

    您将能够使用以下命令查看当前正在运行的 docker 容器。

    docker ps

    然后复制运行容器的CONTAINER ID,执行如下命令

    docker stop <container_id>

    请用实际值替换。

    【讨论】:

    • 我在另一个终端窗口中运行了 docker ps 并收到消息:无法连接到 Docker 守护进程。 docker daemon 是否在此主机上运行?
    • 我想通了。我必须在新的终端窗口中运行 eval $(docker-machine env dev2) 才能使用这些命令。感谢您的帮助。
    • 您应该使用此信息更新您的原始问题。在这种情况下,您需要打开 docker 守护进程——尝试在控制台中运行 dockerd
    • 我认为下面使用docker kill 的答案是正确的答案,直到我读到superuser.com/questions/756999/…,所以值得指出的是 stop 实际上会杀死容器。它只是通过试图礼貌(起初)杀死它。 :-)
    • 当你执行 stop 命令时,它会优雅地停止容器。 Kill 命令将强制执行相同的操作。所以总是尝试使用停止命令。
    【解决方案2】:

    如果您还不知道容器名称,请使用docker container ls 查找容器名称,然后使用docker kill container_name

    来源:Docker documentation

    【讨论】:

    • 这和docker ps -a -q有什么区别?
    • 这里有很好的回应@NicholasSaunders
    【解决方案3】:

    你可以试试这个,很简单的脚本

    docker container kill $(docker ps | awk '/lookup_value/ {print $1}')
    

    解释

    以表格结构列出容器

    docker ps
    

    结果

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
    763e1a00808e        7bb2586065cd        "docker-entrypoint.s…"   2 months ago        Up 2 weeks          3306/tcp, 33060/tcp   mysql_1
    763e1a00999b        7bb2586065cd        "docker-entrypoint.s…"   1 months ago        Up 2 weeks          3307/tcp, 33061/tcp   mysql_2
    

    隔离你的容器

    awk /mysql_1/
    

    结果

    763e1a00808e        7bb2586065cd        "docker-entrypoint.s…"   2 months ago        Up 2 weeks          3306/tcp, 33060/tcp   mysql_1
    

    隔离第一个选项卡值,即容器 ID

    awk ' /mysql_1/ {print $1}'
    

    结果

    763e1a00808e
    

    因此,总而言之,这将隔离并发送 kill 或 stop 命令与图像名称匹配的容器 id

    【讨论】:

    • 您赢得了useless use of grep 奖。您可以通过将其更改为 docker container kill $(docker ps | awk '/image_name/ {print $1}') 来保存您的 fork
    • 省略无用的grep,这实际上是一个非常有用的答案。但是,由于 grep 的使用不好,很难对其进行投票。
    • 很高兴不时赢得一些东西
    【解决方案4】:
    1. “Docker container ls”查看现有容器
    2. “Docker container kill container_id”强制终止或“docker container stop container_id”正常终止

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      • 2018-08-12
      • 2016-07-31
      • 2017-09-25
      • 2021-12-06
      相关资源
      最近更新 更多