使用Jenkins从EC2删除现有的docker映像

我必须使用AWS ECR中存在的图像运行一些容器,因为我需要自动化才能使用Jenkins。

当有新版本的映像进入该存储库后,我就有4个ECR存储库,我的jenkins作业将触发并创建一个新容器。因此,随着微服务代码的更改以及我在ECR中获取新映像,我必须删除旧容器,然后在同一端口上运行新容器。

我正在使用Jenkins的“通过SSH发送文件或执行命令”来执行此操作。 然后我提供如下命令

   aws ecr get-login --no-include-email > login.sh
   bash login.sh
   docker pull 944198216610.dkr.ecr.us-east-1.amazonaws.com/demo- 
     docker:latest
   docker run -d -p 8081:80 944198216610.dkr.ecr.us-east- 
        1.amazonaws.com/demo-docker:latest

现在的问题是,每当我获得新映像时,我都必须停止运行较早的容器,为此,我需要container-id。我不知道在这里获取container-id来停止容器。对此我们提供的任何帮助都将受到高度赞赏。

ilovejingye 回答:使用Jenkins从EC2删除现有的docker映像

获取您可以使用的容器:

docker ps -q --filter "ancestor=944198216610.dkr.ecr.us-east- 
        1.amazonaws.com/demo-docker:latest"

所以要删除它们:

docker rm -f $(docker ps -q --filter "ancestor=944198216610.dkr.ecr.us-east- 
        1.amazonaws.com/demo-docker:latest")

您可以将-a添加到docker ps来删除未运行的容器

  

祖先筛选共享给定图像作为祖先的容器。   表示为图片名称[:tag],图片ID或image @ digest

,

已经给出了答案,但有一件重要的事情我永远不会建议使用

删除容器
docker rm -f

直接发送 SIGKILL ,没有宽限期。

最好的处理方法是先stop the container,然后移走容器,它先发送 SIGTERM ,然后在宽限期后发送 SIGKILL

如果您没有运行ECS,则硬编码名称就足够了,因为您不会同时运行两个容器,所以

docker run --rm --name my_container -d -p 8081:80 944198216610.dkr.ecr.us-east-1.amazonaws.com/demo-docker:latest

因此,在部署过程中,您所需要的全部docker stop my_container将停止,并且容器也将释放该名称,因此您可以使用相同的名称再次进行部署。

docker run --rm --name my_container -d -p 8081:80 944198216610.dkr.ecr.us-east-1.amazonaws.com/demo-docker:latest
本文链接:https://www.f2er.com/3168684.html

大家都在问