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

时间:2020-08-01 12:37:51

标签: docker gitlab-ci continuous-deployment gitlab-ci-runner docker-registry

我创建了一个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,但是如果由于某种原因,容器关闭了,那将给我一个错误,并且无法部署。

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

1 个答案:

答案 0 :(得分:0)

错误消息表示您已经有一个具有该名称的容器,而docker不允许您拥有多个具有相同名称的容器,要解决此问题,请删除旧容器,只需在终端中执行类似{{1 }},您将获得所有容器的列表, 然后使用该名称标识容器的ID,并通过以下操作将其删除:

$docker ps -a