Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用Jenkins从EC2中删除现有docker映像_Amazon Web Services_Docker_Jenkins_Devops_Aws Ecr - Fatal编程技术网

Amazon web services 使用Jenkins从EC2中删除现有docker映像

Amazon web services 使用Jenkins从EC2中删除现有docker映像,amazon-web-services,docker,jenkins,devops,aws-ecr,Amazon Web Services,Docker,Jenkins,Devops,Aws Ecr,我必须从AWS ECR中显示的图像运行一些容器。因为我需要自动化,所以我使用Jenkins 我有4个ECR存储库,只要这个存储库中有一个新版本的映像,我的jenkins作业就会触发并创建一个新容器。因此,随着microservice代码的更改,我在ECR中获得新映像,我必须删除旧容器,并在同一端口上运行新容器 我正在使用Jenkins的“通过SSH发送文件或执行命令”来实现这一点。 然后我提供如下命令 aws ecr get-login --no-include-email > lo

我必须从AWS ECR中显示的图像运行一些容器。因为我需要自动化,所以我使用Jenkins

我有4个ECR存储库,只要这个存储库中有一个新版本的映像,我的jenkins作业就会触发并创建一个新容器。因此,随着microservice代码的更改,我在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。我不知道在这里获取容器id以停止容器。非常感谢您在这方面提供的任何帮助。

要获取容器,您可以使用:

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
以删除未运行的容器

祖先筛选共享给定图像作为祖先的容器。 表示为图像名称[:标记]、图像id或image@digest


要获取容器,您可以使用:

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
以删除未运行的容器

祖先筛选共享给定图像作为祖先的容器。 表示为图像名称[:标记]、图像id或image@digest


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

docker rm -f
直接发送SIGKILL,无需宽限期

最好的处理方法是先移除容器,它先发送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

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

docker rm -f
直接发送SIGKILL,无需宽限期

最好的处理方法是先移除容器,它先发送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

您也可以为您的容器指定一个名称(),或者您可以使用docker
docker ps-q
获取容器id,您也可以为您的容器指定一个名称(),或者您可以使用docker
docker ps-q
获取容器id,非常感谢。如果我想删除图像,有没有类似的命令?图像名称总是一样的?太好了,谢谢。如果我想删除图像,有类似的命令吗?图像名称总是一样的吗?