azure - 在 Docker 容器中运行 Azure PowerShell 脚本

标签 azure docker powershell containers azure-powershell

我想在 Docker 容器中运行 Azure-PowerShell 脚本。由于 Docker 对我来说还很陌生,也许我只是没有正确理解一些概念。

据我了解,下面的 Dockerfile 基于 Linux,并且安装了 PowerShellAzure PowerShell

FROM mcr.microsoft.com/azure-powershell:latest
COPY . /app
SHELL ["cmd", "/S", "/C"]    
RUN "& ./app/WriteHostTest.ps1" #For testing purposes I just want to fire a really simple .ps1 file.

我尝试了各种修改,但目前我收到此错误:

container_linux.go:349: starting container process caused "exec: \"cmd\": executable file not found in $PATH"

在“Windows 容器”中,它正在工作,但是,在这里我无法安装 Az PowerShell 模块。我也尝试了很多修改,但基本上是:

Dockerfile:

## Create first layer: Windows image
FROM mcr.microsoft.com/windows/servercore:ltsc2019
LABEL Robin Bette

## Create second layer: copy everything from the CURRENT DIRECTORY to /app location
COPY . /app

## Download the tools 
SHELL ["cmd", "/S", "/C"]
ADD "https://dist.nuget.org/win-x86-commandline/v5.8.0/nuget.exe" "C:\TEMP\nuget.exe"

## Install NuGet
RUN "C:\TEMP\nuget.exe" install NuGet.Build -Version 2.12.1

## Install PowerShellGet
SHELL ["powershell", "-ExecutionPolicy", "Bypass", "-Command"]
RUN Install-Module -Name PowerShellGet -RequiredVersion 2.2.1 -Force

# Install Azure PowerShell
RUN Install-Module -Name Az -Force

## Run the PowerShell script
RUN PowerShell ./app/Az-Script.ps1


## Stuff I tried:
# Install PS7 (did not help)
# RUN iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI" => Error on the ampersand
#ADD "https://github.com/PowerShell/PowerShell/releases/download/v7.1.0/PowerShell-7.1.0-win-x64.msi" "C:\TEMP\PowerShell-7.1.0-win-x64.msi"
#RUN "C:\TEMP\PowerShell-7.1.0-win-x64.msi"

#RUN Install-PackageProvider -Name NuGet -Force
#RUN Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://aka.ms/install-powershell.ps1'))

Install-PackageProvider : No match was found for the specified search criteria
for the provider 'NuGet'. The package provider requires 'PackageManagement'
and 'Provider' tags. Please check if the specified package has the tags.
Exception calling "ShouldContinue" with "2" argument(s): "Object reference not set to an instance of an object."

在这里,我不断收到错误(为此我还尝试了各种解决方案,例如将 PowerShell 更新到版本 7):

Exception calling "ShouldContinue" with "2" argument(s): "Object reference not set to an instance of an object." At...\PowerShellGet\1.0.0.1\...

有什么想法吗?提前致谢!

最佳答案

对于 Linux 容器,问题在于您尝试启动 cmd.exe,它是 Windows 命令行解释器,在 Linux 中不存在。尝试使用 pwsh 代替(不带选项)。

所以 SHELL 行应该类似于:

SHELL ["pwsh"]

相反。

关于azure - 在 Docker 容器中运行 Azure PowerShell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64819185/

相关文章:

azure - 仅当我单击“登录”时,入口 502 网关错误,其他页面(例如忘记密码/注册)工作正常

java - 从 azure 登录获取 token

string - PowerShell字符串串联给出了换行符

.net - 仅使用 PowerShell 将新文件从 FTP 目录下载到本地文件夹

azure - 是否可以在 Azure 警报中显示 KQL 查询结果?

azure - 我使用 Azure 搜索,而 Azure 搜索又使用 Lucene。有没有办法可以搜索此查询 : colo? r 这将导致获得 "color"和 "colour"值?

docker - Docker镜像构建在文件添加时失败

docker:来自守护进程的错误响应:驱动程序在端点上编程外部连接失败

docker - `docker start`和 `docker run`的选项

string - PowerShell 字符串连接在函数内部和外部的行为不同