RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1532888
Accepted
Egor Trutnev
Egor Trutnev
Asked:2023-07-28 08:27:57 +0000 UTC2023-07-28 08:27:57 +0000 UTC 2023-07-28 08:27:57 +0000 UTC

gitlab-ci。使用 gitlab-runner 在 shell 中构建 docker compose 的问题

  • 772

任务是在docker compose中编写项目的自动组装和发布,并随后启动。为此,我按照以下步骤操作:

  1. 在我的服务器上运行的 gitlab 中,我创建、注册并启动了2 个运行程序(一个docker,第二个shell)。

跑步者

  • 为这些跑步者配置了config.toml,之后它采用以下形式:
concurrent = 1
check_interval = 0
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "docker-runner"
  url = "http://gitlab.my.host123"
  id = 50
  token = "TOKEN-hidden"
  token_obtained_at = 2023-07-27T12:16:48Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker:stable"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

[[runners]]
  name = "shell"
  url = "http://gitlab.my.host123"
  id = 51
  token = "TOKEN-hidden"
  token_obtained_at = 2023-07-27T12:17:46Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "shell"
  [runners.custom_build_dir]
    enabled = true
  [runners.cache]
    MaxUploadedArchiveSize = 0
  1. 在带有 gitlab 的服务器上,使用以下命令授予用户gitlab-runner访问 docker 的权限:

usermod -aG docker gitlab-runner

V/etc/sudoers

  1. 从文件夹中/home/gitlab-runner/删除文件.bashrc, .profile, .bash_logout

  2. 发布gitlab-ci.yml内容如下:

.docker:
  image: docker:latest
  services:
    - name: docker:dind
      alias: docker


variables:
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""

stages:
  - build
  - deploy

build:
  stage: build
  tags:
    - docker
  extends:
    - .docker
  script:
    - docker pull api.$CONTAINER_NAME:latest || true
    - >
      docker build
      --pull
      --cache-from api.my.host123/$CONTAINER_NAME:latest
      --build-arg ASPNETCORE_ENVIRONMENT="Prod"
      --tag api.my.host123/$CONTAINER_NAME:${CI_COMMIT_SHA}
      --tag api.my.host123/$CONTAINER_NAME:latest
      ./MyProject.WebApi
  only:
    - main
    - production

deploy:
  stage: deploy
  tags:
    - shell
  script:
    - mkdir -p ~/deploy
    - cp -i docker-compose.production.yml ~/deploy/docker-compose.yml
    - docker compose down --remove-orphans
    - docker compose pull
    - docker compose -f docker-compose.yml up -d
  only:
    - main
    - production
  1. 在asp.net项目中创建了一个Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 7155

ENV ASPNETCORE_URLS=http://+:7155

RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["MyProject.WebApi.csproj", "./"]
RUN dotnet restore "MyProject.WebApi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MyProject.WebApi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyProject.WebApi.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyProject.WebApi.dll"]

和两个docker-compose文件:

  • docker-compose.生产.yml
version: '3.3'

services:
  webapi_myproject:
    image: mcr.microsoft.com/dotnet/sdk:7.0
    container_name: webapi_myproject
    ports:
      - "7155:7155"
    expose:
      - "7155"
    restart:
      unless-stopped
  • 和docker-compose.yml
version: '3.3'

services:
  webapi_myproject:
    build:
      context: ./MyProject.WebApi
      dockerfile: Dockerfile
    container_name: webapi_myproject
    ports:
      - "7155:7155"
    expose:
      - "7155"
    restart:
      unless-stopped

发布并运行docker-runners 后,我得到以下输出:

结果

在构建中,一切看起来都非常好,并且项目映像是在服务器磁盘上创建的

在此输入图像描述

在这里部署...

在此输入图像描述

docker.errors.DockerException:获取服务器 API 版本时出错:HTTPConnectionPool(host='docker', port=2375): url 超出最大重试次数:/version (由 NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f612d4ea560> 引起) : 无法建立新连接: [Errno -3] 名称解析暂时失败'))

Если я добавляю в gitlab-ci.yml

before_script: docker version

deploy:
  stage: deploy
  tags:
    - shell
  before_script:
    - docker version
  script:
    - mkdir -p ~/deploy
    - cp -i docker-compose.production.yml ~/deploy/docker-compose.yml
    - docker compose down --remove-orphans
    - docker compose pull
    - docker compose -f docker-compose.yml up -d
  only:
    - main
    - production

То вижу уже следующую ошибку:

在此输入图像描述

error during connect: Get "http://docker:2375/v1.24/version": dial tcp: lookup docker on 127.0.0.53:53: server misbehaving

Если все команды из deploy я выполняю на сервере в консоли, то контейнер создаётся и всё работает так, как мне и нужно. Здесь же я подозреваю, что проблема в докере, но знаний и опыта не хватает понять причину. Буду благодарен за любую помощь и наводки в решении данной проблемы!

docker
  • 1 1 个回答
  • 20 Views

1 个回答

  • Voted
  1. Best Answer
    Egor Trutnev
    2023-07-31T03:17:11Z2023-07-31T03:17:11Z

    问题的解决方案是error during connect: Get "http://docker:2375/v1.24/version": dial tcp: lookup docker on 127.0.0.53:53: server misbehaving显而易见的。问题是变量位于所有块之上,并且其效果也扩展到了shell标记(在部署中) 。将变量隐藏在构建块中就足够了,一切正常。我还更改了脚本,使其符合逻辑。

    gitlab-ci.yml

    .docker:
      image: docker:latest
      services:
        - name: docker:dind
          alias: docker
    
    stages:
      - build
      - deploy
    
    build:
      stage: build
      tags:
        - docker
      extends:
        - .docker
      #Перенос variables в build
      variables:
        DOCKER_HOST: tcp://docker:2375
        DOCKER_DRIVER: overlay2
        DOCKER_TLS_CERTDIR: ""
      script:
        - docker build
          --cache-from api.sh.forged.host/$CONTAINER_NAME:latest
          --build-arg ASPNETCORE_ENVIRONMENT="Prod"
          --tag api.sh.forged.host/$CONTAINER_NAME:${CI_COMMIT_SHA}
          --tag api.sh.forged.host/$CONTAINER_NAME:latest
          ./SmartHome.WebApi
      only:
        - main
        - production
    
    deploy:
      stage: deploy
      tags:
        - shell
      script:
        - docker compose down --remove-orphans
        - docker compose rm -f
        - docker compose build
        - docker compose pull
        - docker compose up -d
      only:
        - main
        - production
    
    • 0

相关问题

  • 在 Docker 容器中运行 Jenkins 时未安装插件

  • 是否可以从该容器内连接到 docker 容器

  • Docker 中的测试报告

  • 如何停止 podman 容器?

  • docker-compose 中的端口

  • 我可以在商业项目中使用 Docker CE 吗?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5