首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将容器从GitLab部署到EC2的正确方法

将容器从GitLab部署到EC2的正确方法
EN

Stack Overflow用户
提问于 2020-03-24 19:09:36
回答 1查看 90关注 0票数 0

我尝试将我的容器从gitlab注册中心部署到EC2实例,我到这里来部署容器,但是当我更改某些内容并希望再次部署时,需要删除旧容器和旧映像并重新部署,因为我创建了这个脚本来删除所有东西并重新部署。

代码语言:javascript
运行
复制
...
deploy-job:
  stage: deploy
  only:
    - master

  script:
    - mkdir -p ~/.ssh
    - echo -e "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - ssh -i ~/.ssh/id_rsa ec2-user@$DEPLOY_SERVER "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com &&
     docker stop $(docker ps -a -q) &&
     docker rm $(docker ps -a -q) &&
     docker pull registry.gitlab.com/doesntmatter/demo:latest &&
     docker image tag registry.gitlab.com/doesntmatter/demo:latest doesntmatter/demo &&
     docker run -d -p 80:8080 doesntmatter/demo"

当我尝试这个脚本时,我得到了以下错误:

代码语言:javascript
运行
复制
 "docker stop" requires at least 1 argument.    <<-------------------- error
 See 'docker stop --help'.
 Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...]
 Stop one or more running containers
Running after script
00:01
Uploading artifacts for failed job
00:01
 ERROR: Job failed: exit code 1

如果你仔细看,我在码头停车后使用$(docker ps -a -q)

问题:

  1. 我知道这不是让我的部署(这里的开发人员)的好方法,请您建议其他方法,只使用gitlab和ec2。
  2. 当我的机器中有或没有容器时,有什么方法可以避免这个错误?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-24 21:35:48

在执行作业时,可能没有容器在运行。

为了避免这种行为,可以将命令中的位更改为:

代码语言:javascript
运行
复制
docker ps -a -q | xargs -r sudo docker stop
docker ps -a -q | xargs -r sudo docker rm

如果没有运行容器,这些操作将不会产生错误。

之后,实际上还有其他方法在AWS上部署容器,其中有处理容器的服务,比如ECS艾克斯法格特。还可以考虑使用terraform来使用IaC原则部署基础设施(即使对于ec2实例也是如此)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60837717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档