部署时如何启动新建的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>
我创建了一个 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>