AWS ECS上的Windows Docker容器 - IAM角色

时间:2018-05-30 22:59:49

标签: amazon-web-services powershell docker amazon-ecs windows-container

根据the docs,我需要在运行容器时运行以下PShell脚本,以便访问AWS IAM角色:

$gateway = (Get-WMIObject -Class Win32_IP4RouteTable | Where { $_.Destination -eq '0.0.0.0' -and $_.Mask -eq '0.0.0.0' } | Sort-Object Metric1 | Select NextHop).NextHop
$ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex
New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway

然而它引发了一个例外:

  

Get-WMIObject:术语“Get-WMIObject”未被识别为名称   cmdlet,函数,脚本文件或可操作程序。检查   拼写名称,或者如果包含路径,请验证路径   是正确的,然后再试一次。

一些谷歌搜索似乎表明cmdlet已被Get-CimInstance取代,这确实似乎至少进展到脚本中的第3行,但随后:

  

New-NetRoute:无法在参数'InterfaceIndex'上处理参数转换。无法将“System.Object []”类型的“System.Object []”值转换为“System.UInt32”类型。

$ifIndex的值是数组[7,19]

我的Dockerfile:

FROM microsoft/dotnet:2.0-sdk AS build-env
WORKDIR /app

COPY ./ ./
RUN dotnet publish project/project.csproj -c Release -r win-x64 -o out

FROM microsoft/nanoserver:sac2016
WORKDIR /app
COPY --from=build-env /app/project/out ./
COPY --from=build-env /app/startProject.ps1 ./

ENTRYPOINT ["powershell", ".\\startProject.ps1"]

startProject.ps1的完整内容:

$gateway = (Get-CimInstance -Class Win32_IP4RouteTable | Where-Object { $_.Destination -eq '0.0.0.0' -and $_.Mask -eq '0.0.0.0' } | Sort-Object Metric1 | Select-Object NextHop).NextHop
$ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select-Object ifIndex).ifIndex
New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway

$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Start-Process "$scriptDir\Project.exe" -Wait

修改

实际上我似乎说得太早了 - 使用Get-CimInstance会返回错误:

  

Get-CimInstance:无效的课程

这似乎表明找不到Win32_IP4RouteTable

0 个答案:

没有答案