ubuntu - 如何使用共享运行器运行从 GitLab 容器注册表中提取的 Docker 容器?

标签 ubuntu docker-compose gitlab-ci docker-in-docker container-registry

基本上我到目前为止的工作如下:

  • 登录 GitLab 容器注册表
  • 使用 docker-compose.yml 配置文件构建 Docker 容器
    GitLab 共享运行者 CI/CD
  • 将所有构建的 Docker 容器推送到 GitLab Container Registry
  • 通过 SSH
  • 登录到我的 Azure VM Ubuntu 服务器
  • 从 GitLab Container Registry
  • 拉取 Docker 容器
  • 在此实例中运行所需的 Docker 容器
    "*/client:latest",将其暴露到端口 80
  • 记录运行的容器,证明我想要的容器存在
    😊

  • 第 6 步是唯一似乎运行成功的步骤,但是当我访问我的域时,没有任何东西在运行🤕,尽管 CI 工作已成功完成!
    但是,当我尝试使用 PuTTY 手动执行相同的操作,从注册表中提取图像并在端口 80 上运行时,当我检查我的域时一切正常!
    如果有人能看到我可能做错了什么,我将不胜感激,谢谢。
    这是我的 GitLab YAML 配置文件;
    image: docker:latest
    
    services:
      - docker:dind
    
    stages:
      - deploy
    
    deploy:
        stage: deploy
        before_script:
          - eval $(ssh-agent -s)
          - echo "$SERVER_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
          - mkdir -p ~/.ssh
          - chmod 700 ~/.ssh
          - ssh-keyscan -H $SERVER_IP >> ~/.ssh/known_hosts
          - chmod 644 ~/.ssh/known_hosts
        script:
          - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
          - docker-compose --file docker-compose.prod.yml build --force-rm --no-cache
          - docker push registry.gitlab.com/[MY_GITLAB_ACCOUNT]/app/client:latest
          - ssh -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_HOST
          - docker pull registry.gitlab.com/[MY_GITLAB_ACCOUNT]/app/client:latest
          - docker images --all
          - docker run -p 80:8080 --detach registry.gitlab.com/[MY_GITLAB_ACCOUNT]/app/client:latest
          - docker ps --all
    
    enter image description here
    谢谢

    最佳答案

    在您的 GitLab CI 作业中,您的 SSH 命令正在执行,然后在进入下一个 shell 步骤之前立即关闭远程 shell。所以,你只是在运行 docker run在您的 GitLab 工作中,而不是在您的服务器上。
    要在远程服务器上运行命令,您需要使用 ssh 内联要运行的命令。命令。

    script:
      # ...
      - ssh -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_HOST "docker run --pull -p 80:8080 -d registry.gitlab.com/[MY_GITLAB_ACCOUNT]/app/client:latest"
    
    请记住,您的远程服务器还需要配置身份验证才能从您的注册表中提取。

    关于ubuntu - 如何使用共享运行器运行从 GitLab 容器注册表中提取的 Docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72241034/

    相关文章:

    php - 我如何使用 PHP 运行 cron 作业?

    Linux/Unix 检查 VPN 连接是否激活/启动

    angular - 子目录中的 Laravel

    docker - 无法在 docker compose 上启动容器

    gitlab - 如何从centos完全删除/卸载gitlab-runner

    ruby - 在 Ubuntu 上安装 dm-sqlite-adapter 错误

    azure - :( Application Error when trying to deploy docker-compose app in azure app service

    docker - docker-compose从容器内部获取容器名称

    docker - 在 GitLab CI/CD 作业中将环境变量传递给 docker run 返回无效的引用格式?

    docker - 使用共享运行器访问 gitlab 注册表