如何在 Windows 上为 Docker EE 构建 Docker-in-Docker 镜像?



我计划在 Kubernetes pods 中运行的动态 Jenkins 代理中构建 Docker EE 映像,因此需要

  • 一个同时提供 Jenkins Agent 功能和 Docker 的 Docker 镜像。目前,我正在使用jenkins/jnlp-agent:latest-windows作为映像在Windows LTSC节点池上运行,该节点池似乎充分提供了Jenkins代理功能或
  • 一种扩展jenkins/jnlp-agent:latest-windows的方法,以便它也允许运行 Docker。我幼稚的方法

    FROM jenkins/jnlp-agent:latest-windows
    SHELL ["powershell", "-Command", "$ErrorActionPreference = 'SilentlyContinue'; $ProgressPreference = 'SilentlyContinue';"]
    USER ContainerAdministrator
    COPY install-docker.ps1 .
    RUN ./install-docker.ps1
    RUN Remove-Item install-docker.ps1
    

    install-docker.ps1包含

    Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -ErrorAction Continue
    Install-Module -Name DockerMsftProvider -Repository PSGallery -Force -ErrorAction Continue
    Install-Package -Force -ErrorAction Continue -Name docker -ProviderName DockerMsftProvider
    

    以下 https://learn.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server 由于以下原因而失败

    > Start-Service Docker
    Start-Service : Failed to start service 'Docker Engine (Docker)'.
    At line:1 char:1
    + Start-Service Docker
    + ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service],
    ServiceCommandException
    + FullyQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand
    

  • Windows 上用于 Docker EE 的 Docker-in-Docker 容器,它公开了一个 Docker TCP 套接字,并允许 Jenkins 代理容器连接到它。

该设置应在Google Kubernetes Engine提供的Windows Server 2019节点池上运行。我知道Windows池目前是测试版。

如果有人知道如何让第二种方法工作,仍然有必要以用户 jenkins 而不是容器管理员的身份运行安装程序以提高安全性。

尝试在 Dockerfile 中创建服务。

RUN powershell New-Service -Name “RSDataQualityWorkerPool” -BinaryPathName “C:WWWWinServicesRSDataQualityWorkerPoolRSDataQualityWorkerPool.exe”

在正在运行的容器中启动它。

Start-Service -Name “RSDataQualityWorkerPool”

看看这里:windows-jnlp-jenkins,docker-service-on-windows。

相关内容

  • 没有找到相关文章

最新更新