首页 > 解决方案 > gitlab CI + Docker + .NET Core,我不明白为什么只安装了一个旧的.net版本

问题描述

我有一个 gitlab CI 文件,它正在构建这样的项目:

image: 'docker/compose:1.25.1-rc1'
services:
    - 'docker:dind'
variables:
    GIT_SUBMODULE_STRATEGY: recursive

    stages:
        - build
        - deploy

    buildCode:
        stage: build
        except:
          - deploy
        script:
            - docker build -t dataserver -t ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest -f dockerfile .

    deployCode:
        stage: deploy
        only:
          - deploy
        script:
            - docker build -t dataserver -t ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest -f dockerfile .
            - docker login registry.gitlab.com -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD}
            - docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest        
            - docker network create network && echo 'creating network'
            - docker-compose -f docker-compose.yml pull
            - docker-compose -f docker-compose.yml rm -f -s
            - docker-compose -f docker-compose.yml up -d

这个想法是使用 docker/compose:1.25.1-rc1 来带来一个 docker-compose 环境并构建文件。

docker 文件本身正在调用此映像来构建

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 作为构建

然后将此图像用于运行时:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 作为最终版本

所以应该安装.net 3.1。

但是,当我运行该应用程序时,我得到了这个:

在此处输入图像描述

(我无法进行文本捕获,所以这是截图)

这意味着未安装 .net 3.1,我无法找出问题所在。如果我使用相同的 CI 设置为 3.0 编译应用程序,它就会运行。

标签: docker.net-coregitlabgitlab-ci

解决方案


在构建你的图像之前,尝试强制对图像进行 docker 图像拉取。

似乎你的 aspnet:3.1 当你拉它的时候刚刚有 3.1.0-preview 版本。

3.1 标签总是针对最后的 3.1.xxx 版本。

发布之前是预览版……现在是 3.1.0……未来将是 3.1.x。

如果您已经提取了带有标签 3.1 的图像,您的构建将使用 met 图像。这可能不是远程存储库中的当前 3.1。如果你拉它,哈希会被验证,如果需要会更新图像


推荐阅读