部署时如何启动新建的docker镜像?

How to start newly built docker image when deploying?

我创建了一个 gitlab-ci.yml 管道来部署一个简单的 react.js 应用程序。 我在 EC2 (AWS) 上安装了 gitlab-运行ner,在我的管道中构建了镜像并将其推送到注册表。

这是我的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: Error response from daemon: Conflict. The container name "/app.test" is already in use by container "f8e888d6dff6fe5808d7577fe8fddc3e24cd8cc0e248a69d36e7ce51bf339ae6". You have to remove (or rename) that container to be able to reuse that name.

因为该容器已经 运行ning 并且具有相同的名称。 我不想在部署时停止所有容器,因为我可以有其他 docker 个容器 运行ning。我也想过 docker stop app.test && docker rm app.test 但如果由于某种原因容器已关闭,则会给我一个错误并且不会部署。

处理这种情况的正确方法是什么?

错误消息意味着您已经有一个同名的容器,并且 docker 不允许您有多个同名的容器,要解决这个问题,请删除旧容器,只需在像 $docker ps -a 这样的终端,你会得到一个你拥有的所有容器的列表, 然后识别具有该名称的容器的 ID,并通过执行以下操作将其删除:

$docker rm -f <container-id>