docsによると、 AWS IAM ロールにアクセスするには、コンテナを実行するときに次の PShell スクリプトを実行する必要があります。
$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」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから再試行してください。
いくつかのグーグルは、コマンドレットが に置き換えられたことを示唆している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