【问题标题】:Docker Compose remove containers started using docker runDocker Compose 删除使用 docker run 启动的容器
【发布时间】:2017-08-10 20:05:28
【问题描述】:

我有两个不同的 Web 项目,它们使用同一组 docker 图像来创建 API 响应。开发人员可以从 GitHub 克隆这些 Web 项目中的任何一个并运行 npm 脚本以在其本地开发机器上启动 Web 层。

回购 1 在这个 repo 中,Web 层的构建脚本使用脚本文件来启动应用层的容器(比如容器名称是 APP_CONTAINER)。应用层的端口是 9090(例如),而 Web 层在 8080 上运行。此 repo 中的 docker 脚本检查任何正在运行的应用程序 (API) 容器,删除它们,从我们的内部 docker hub 拉取最新的图像,然后然后再次启动这些容器。

回购 2 在这个 repo 中,web 层的构建脚本使用 docker compose 来提取应用程序 (API) 容器(与 APP_CONTAINER 同名)。这些容器的端口需要是相同的 9090 端口。此 repo 的 web 层在不同的端口上运行,即端口 3000。

我的问题是,当我在 Repo 2 中运行 docker compose 时,如果容器 APP_CONTAINER 已经由第一个 repo 使用 docker run 命令创建并运行,有没有办法删除它?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    如果容器名称始终相同(或您可以确定的名称),您可以在 bash 中使用类似的名称(或将其集成到您调用脚本的任何位置)。

    如果你只想停止已经运行的容器:

    docker stop $(docker ps -q -f name=APP_CONTAINER)
    

    如果你想停止并移除已经运行的容器

    docker rm $(docker stop $(docker ps -q -f name=APP_CONTAINER))
    

    如果您想删除现有的应用容器,即使它没有运行,您也可以使用:

    docker rm $(docker stop $(docker ps -qa -f name=APP_CONTAINER))
    

    如果您必须在docker-compose up 之前运行此命令,您可以创建一个您运行的脚本,而不是手动启动容器。大概是这样的:

    #!/bin/bash
    
    APP_CONTAINER="APP_CONTAINER" 
    docker stop $(docker ps -q -f name=$APP_CONTAINER) 
    docker-compose up -d 
    

    【讨论】:

    • 这些是我编写脚本时通常采取的步骤。我希望这些在开发人员运行 docker-compose up 时发生。我可以使用我的 docker compose yml 配置以某种方式完成它们吗?
    • 我通常做的是在根目录中添加一个脚本,该脚本运行开发人员所需的所有操作(在某些情况下,您必须导入数据库或执行一些其他操作)。否则在答案中更新是不可读的。
    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    相关资源
    最近更新 更多