更改基本Docker映像的默认命令

Kee*_*eto 5 docker

我从docker hub下载了ubuntu基本镜像。现在,我正在尝试基于ubuntu映像构建一个新映像。但是,我希望ubuntu映像的默认命令是“ / bin / bash -c”而不是“ / bin / sh”,以便当我在Dockerfile中使用RUN时,它访问bash而不是sh。请注意,我在说的是同一图像的默认命令,而不是我要构建的图像。

Joh*_*mer 10

也许这可以帮助:

SHELL ["/bin/bash", "-c"]

参考: https ://github.com/moby/moby/issues/7281#issuecomment-389440503


iva*_*ant 6

我认为图像中没有默认命令ubuntu。当你跑步时

$ docker run ubuntu echo hi
hi
Run Code Online (Sandbox Code Playgroud)

它运行["/bin/echo", "hi"]。您可以通过运行来验证这一点

$ docker run ubuntu set
2014/06/20 08:38:54 exec: "set": executable file not found in $PATH
Run Code Online (Sandbox Code Playgroud)

set是 shell 中的内置命令,但 docker 尝试将其作为外部命令运行。

如果您想将默认 shell 从 dash 更改为 bash,您可以使用固定符号链接创建一个图像。这是一个 dockerfile:

FROM ubuntu
RUN ln -sf /bin/bash /bin/sh
Run Code Online (Sandbox Code Playgroud)

[编辑]

我刚刚意识到你在说什么。我不知道您是否可以更改RUN命令的默认值,但您可以像这样显式使用 /bin/bash :

RUN /bin/bash -c ...
Run Code Online (Sandbox Code Playgroud)

  • `RUN ln -sf /bin/bash /bin/sh` 这是一个糟糕的主意。ubuntu 将 /bin/sh 目标定为 dash 是有原因的。dash 是一个完全 posix shell,它比 bash 快几个数量级。将 /bin/sh 链接到 bash 将大大降低服务器的性能。引用:https://wiki.ubuntu.com/DashAsBinSh (3认同)