Я создал конвейер gitlab-ci.yml для развертывания простого приложения response. js. Я установил gitlab-runner на EC2 (AWS) и внутри своего конвейера я создаю образ и помещаю его в реестр sh.
Это мой файл 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
, но если по какой-то причине контейнер не работает, это приведет к ошибке и не развернется.
Как правильно разрешить эту ситуацию?