Контейнеры-докеры Windows в AWS ECS - роли IAM - PullRequest
0 голосов
/ 31 мая 2018

В соответствии с документами , мне нужно запустить следующий скрипт 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» не распознается как имя командлета, функции, файла сценария или работоспособной программы.Проверьте правильность написания имени или, если путь был указан, убедитесь, что путь указан правильно, и повторите попытку.

Похоже, что в некоторых поисках Google командлет был заменен на 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

...