返回
顶部

修改密码

首页 > 文章 > 体育 > 正文
云计算核心技术Docker教程:Dockerfile文件SHELL命令

+1

-1

收藏

+1

-1

点赞0

评论0

标题:云计算核心技术Docker教程:Dockerfile文件SHELL命令
详情介绍-作者:xiaowei-来源: 极全网 -如有问题点击:在线客服帮助

Dockerfile文件SHELL指令可以覆盖命令的shell模式所使用的默认shell。Linux的默认shell是[“/bin/sh”, “-c”],Windows的是[“cmd”, “/S”, “/C”]。SHELL指令必须以JSON格式编写。

语法格式

SHELL ["executable", "parameters"]

该SHELL指令在Windows上特别有用,在Windows上有两个常用且完全不同的本机shell:cmd和powershell,以及可用的替代shell包括sh。

该SHELL说明可以出现多次。每个SHELL指令将覆盖所有先前的SHELL指令,并影响所有后续的指令。例如:

FROM microsoft/windowsservercore

# Executed as cmd /S /C echo default

RUN echo default

# Executed as cmd /S /C powershell -command Write-Host default

RUN powershell -command Write-Host default

# Executed as powershell -command Write-Host hello

SHELL ["powershell", "-command"]

RUN Write-Host hello

# Executed as cmd /S /C echo hello

SHELL ["cmd", "/S", "/C"]

RUN echo hello

当RUN, CMD和ENTRYPOINT使用shell形式时,将使用SHELL指令设置的shell执行。

以下的示例是windows常见的模式,可以使用SHELL指令精简:

RUN powershell -command Execute-MyCmdlet -param1 "c:foo.txt"

docker调用的命令将是:

cmd /S /C powershell -command Execute-MyCmdlet -param1 "c:foo.txt"

这效率低下有两个原因。首先,有一个不必要的cmd.exe命令处理器(也称为Shell)被调用。其次,shell 形式的每条RUN指令都需要在命令前加上前缀。powershell -command

为了使其更有效,可以采用两种机制之一。一种是使用RUN命令的JSON形式,例如:

RUN ["powershell", "-command", "Execute-MyCmdlet", "-param1 "c:\foo.txt""]

虽然没有调用了cmd.exe,不过需要对双引号进行转义,看起来比较冗长。另一种机制是使用SHELL指令和shell形式,使得windows用户可以使用更自然的语法,特别是与escape指令一起用时:

# escape=`

FROM microsoft/nanoserver

SHELL ["powershell","-command"]

RUN New-Item -ItemType Directory C:Example

ADD Execute-MyCmdlet.ps1 c:example

RUN c:exampleExecute-MyCmdlet -sample ”hello world”

版权声明:本文内容由极全网实名注册用户自发贡献,版权归原作者所有,极全网-官网不拥有其著作权,亦不承担相应法律责任。具体规则请查看《极全网用户服务协议》和《极全网知识产权保护指引》。如果您发现极全网中有涉嫌抄袭的内容,点击进入填写侵权投诉表单进行举报,一经查实,极全网将立刻删除涉嫌侵权内容。

扫一扫在手机打开

评论
已有0条评论
0/150
提交
热门评论
相关推荐
换一批
热点排行