我正在尝试使用以下代码使用azure容器实例创建owasp zap实例:
$containerGroupName = "EW-owaspzap"
$containerDnsName = "EW-owaspzap"
$imageName = "owasp/zap2docker-stable"
$myIpAddress = (Invoke-WebRequest ifconfig.me/ip).Content.Trim()
$environmentVars = @{"api.key"="myreallysecureapikey";"api.addrs.addr.name"=$myIpAddress}
$containerGroup = Get-AzureRmContainerGroup -ResourceGroupName $resourceGroupName -Name $containerGroupName -ErrorAction SilentlyContinue
if (!$containerGroup) {
New-AzureRmContainerGroup -ResourceGroupName $resourceGroupName -Name $containerGroupName -Image $imageName -Command zap-webswing.sh -Port 8080,8090 `
-IpAddressType Public -DnsNameLabel $containerDnsName -RestartPolicy OnFailure -Location WestEurope -AzureFileVolumeShareName $storageShareName `
-AzureFileVolumeMountPath '/output' -AzureFileVolumeAccountCredential $storageCredentials -EnvironmentVariable $environmentVars
}
但是我得到了错误:
容器组“ EW-owaspzap”的容器“ EW-owaspzap”中的环境变量名称无效。有效的环境变量 名称必须以字母字符或''开头,后跟一串字母数字字符或''(例如'my_name'或'MY_NAME'或'MyName')
根据此https://github.com/zaproxy/zaproxy/wiki/Docker,我具有正确的环境变量的格式。还有什么我想念的吗?
答案 0 :(得分:1)
这是ACI限制-有关环境变量的命名限制,请参见here:
|环境变量| 1-63 |不区分大小写|字母数字,和 在第一个字符或最后一个字符以外的任何地方加下划线(_)
这不是Zap的问题,而是ACI。
可以使用脚本解决此问题,该脚本以Azure格式获取env var并将其转换为Zap的格式(例如api_key
到api.key
)。这是一个伪代码(我没有测试过),只是为了给您一个想法:
export set api.key=$API_KEY
./zap
根据Zap的官方映像创建一个新的docker映像,复制脚本并将其用于启动Zap,而不是常规Zap的命令。
答案 1 :(得分:0)
对于您的问题,我认为您有一些误解。您发布的链接docker run -u zap -p 8080:8080 -i owasp/zap2docker-stable zap-x.sh -daemon -host 0.0.0.0 -port 8080 -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true
中的命令,您应该看看docker run
,没有像-config
这样的参数。
因此,我认为从zap-x.sh
到末尾的命令是一个带有脚本zap-x.sh
的完整bash命令。您可以在脚本zap-x.sh
中检查参数定义。
PowerShell命令中的环境是一个哈希表,您可以获取更多详细信息here。此外,Azure容器实例中的Naming conventions也有一些限制。
答案 2 :(得分:0)
不确定您是否能完成他的工作,但是我使用了Powershell脚本,并且能够通过替换“”来创建Zap容器。 $ environmentVars数组中包含“ _”。