我有两个不同的Web项目,使用相同的docker镜像集来创建API响应。开发人员可以从GitHub克隆这些Web项目中的任何一个并运行npm脚本以在其本地开发计算机上启动Web层。
回购1 在此repo中,Web层的构建脚本使用脚本文件来启动应用层的容器(例如,容器名称为APP_CONTAINER)。应用程序层的端口是9090(例如),Web层运行在8080.此仓库中的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命令运行)?
答案 0 :(得分:0)
如果容器名称总是相同(或者你可以确定的东西),你可以在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