如何用单条命令构建并运行Docker镜像?PowerShell执行报错求助
在PowerShell中实现Docker镜像构建+运行单命令执行的方案
问题
要通过单条命令完成Docker镜像构建与运行,在PowerShell中执行以下命令时触发报错:
docker build -t dockerwithmultiops . && docker run -d --name=dockerwithmultiops -p 8000-8002:8000-8002 dockerwithmultiops:latest
错误提示:
+ docker build -t dockerwithmultiops . && docker run -d --name=dockerwi ... + ~~ The token '&&' is not a valid statement separator in this version. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : InvalidEndOfLine
原因
你的PowerShell版本(大概率是5.1及以下)不支持&&作为条件执行分隔符,这个语法是PowerShell 7及以上版本才引入的。
解决办法
1. 兼容旧版PowerShell的条件执行写法
如果不想升级PowerShell,用PowerShell原生的自动变量$?判断前命令执行状态,仅当构建成功时才启动容器:
docker build -t dockerwithmultiops .; if ($?) { docker run -d --name=dockerwithmultiops -p 8000-8002:8000-8002 dockerwithmultiops:latest }
$?会存储上一条命令的执行结果:成功为$true,失败为$false。
2. 升级到PowerShell 7+
升级后可以直接使用你原本的命令,PowerShell 7及以上完全支持&&(前命令成功则执行后命令)和||(前命令失败则执行后命令)的语法。
3. 强制顺序执行(不校验构建结果)
如果不需要检查镜像构建是否成功,只想按顺序执行两条命令,用分号分隔即可:
docker build -t dockerwithmultiops .; docker run -d --name=dockerwithmultiops -p 8000-8002:8000-8002 dockerwithmultiops:latest
注意:这种写法下,即使构建失败,docker run仍会尝试执行,根据自身需求选择。
内容的提问来源于stack exchange,提问作者Rashmita Purkayastha
相关产品推荐
相关产品推荐

