我创建了一个gitlab-ci.yml管道来部署一个简单的react.js应用程序。 我在EC2(AWS)上安装了gitlab-runner,并在管道中构建了映像并将其推送到注册表。
这是我的gitlab-ci.yml文件:
image: docker:latest
services:
- docker:dind
stages:
- test
- deploy
test-build:
stage: test
only:
- master
tags:
- master
script:
- sudo docker build .
deploy-production:
stage: deploy
only:
- master
tags:
- master
before_script:
# remove the offending package golang-docker-credential-helpers without removing all of docker-compose
- sudo dpkg -r --ignore-depends=golang-docker-credential-helpers golang-docker-credential-helpers
- sudo docker version
- "sudo docker info"
- "sudo docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY"
script:
- "sudo docker build -t ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest --pull ."
- "sudo docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest"
- "sudo docker run -it -d -p 80:80 --rm --name daruma.comunicato ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest"
after_script:
- "sudo docker logout ${CI_REGISTRY}"
when: manual
问题是:如何运行最新的推送图像?
如果我运行docker run -it ...
,管道将失败,并显示以下信息:
docker:来自守护程序的错误响应:冲突。容器名称“ /app.test”已被容器“ f8e888d6dff6fe5808d7577fe8fddc3e24cd8cc0e248a69d36e7ce51bf339ae6”使用。您必须删除(或重命名)该容器才能重用该名称。
因为该容器已经在运行并且具有相同的名称。
我不想在部署时停止所有容器,因为我可以运行其他Docker容器。我还考虑过docker stop app.test && docker rm app.test
,但是如果由于某种原因,容器关闭了,那将给我一个错误,并且无法部署。
处理这种情况的正确方法是什么?
答案 0 :(得分:0)
错误消息表示您已经有一个具有该名称的容器,而docker不允许您拥有多个具有相同名称的容器,要解决此问题,请删除旧容器,只需在终端中执行类似{{1 }},您将获得所有容器的列表, 然后使用该名称标识容器的ID,并通过以下操作将其删除:
$docker ps -a