Windows自定义容器镜像安装Docker in Docker及AWS CLI问题求助
Windows自定义CodeBuild镜像安装Docker与AWS CLI v2实操方案
Docker in Docker服务启动失败修复
- 常见失败原因:仅拷贝Docker二进制文件未注册服务、服务运行权限配置错误、CodeBuild构建会话不会自动拉起镜像内注册的系统服务,按以下步骤配置即可正常运行:
- 统一版本匹配:基础镜像、Docker引擎版本、CodeBuild运行环境的Windows内核版本全部对齐Windows Server Core LTSC 2022,从根源避免版本兼容问题。
- 镜像构建阶段完成服务注册:Docker二进制文件拷贝完成后,在Dockerfile中执行以下PowerShell命令完成基础配置:
# 注册Docker后台服务 dockerd --register-service # 配置服务以本地系统账户权限按需启动 sc.exe config docker binPath= "C:\Program Files\Docker\dockerd.exe --run-service" start= demand obj= LocalSystem type= own # 配置防火墙规则放行Docker daemon本地通信端口 New-NetFirewallRule -Name "DockerDaemon" -DisplayName "Docker Daemon" -Direction Inbound -Protocol TCP -LocalPort 2375 -Action Allow -Enabled True # 预创建Docker运行数据目录,避免首次启动触发权限报错 New-Item -Type Directory -Path C:\ProgramData\Docker -Force New-Item -Type Directory -Path C:\ProgramData\docker\config -Force
- 构建阶段显式拉起服务:不要依赖Windows系统的服务自启动逻辑,在buildspec.yaml的install阶段执行服务启动与就绪检查,再运行后续Docker命令:
phases: install: commands: - Start-Service docker # 轮询等待Docker服务就绪,最长等待30秒 - $retryCount = 0; while($retryCount -lt 15) { try { docker info | Out-Null; break } catch { Start-Sleep -Seconds 2; $retryCount++ } }
AWS CLI v2安装、命令无法识别问题修复
- 常见失败原因:静默安装后未将CLI可执行文件路径写入系统级环境变量、MSI安装参数配置错误,导致PowerShell会话无法识别aws命令,按以下步骤配置即可:
- 在Dockerfile中执行以下PowerShell命令完成静默安装:
# 下载AWS CLI v2官方MSI安装包到本地 Invoke-WebRequest -Uri "AWSCLIV2.msi官方下载地址" -OutFile "C:\awscliv2.msi" -UseBasicParsing # 执行无交互静默安装,指定固定安装路径避免权限问题 Start-Process msiexec.exe -ArgumentList '/i', 'C:\awscliv2.msi', '/quiet', '/norestart', 'TARGETDIR=C:\Program Files\Amazon\AWSCLIV2' -Wait # 将AWS CLI路径写入系统级环境变量,确保所有PowerShell会话可直接调用 [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\Amazon\AWSCLIV2", [EnvironmentVariableTarget]::Machine) # 删除安装包压缩镜像体积 Remove-Item C:\awscliv2.msi -Force # 构建阶段直接验证安装结果 aws --version
- 不需要额外修改PowerShell执行策略,环境变量配置完成后,buildspec执行阶段可直接调用aws命令;CodeBuild运行环境默认注入AWS服务交互的临时权限凭证,无需手动配置访问密钥。
注意:Windows环境下的Docker in Docker仅支持构建Windows容器镜像,完全适配.NET Framework遗留应用迁移到Fargate Windows任务的场景,不支持构建Linux容器镜像。配置完成后可直接调用aws命令获取ECR登录凭证,完成镜像构建、推送全流程。
内容的提问来源于stack exchange,提问作者GGG
相关产品推荐
相关产品推荐

