Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改基本docker图像的默认命令_Docker - Fatal编程技术网

更改基本docker图像的默认命令

更改基本docker图像的默认命令,docker,Docker,我从docker hub下载了ubuntu基本映像。现在我正试图在ubuntu映像的基础上构建一个新映像。但是,我希望ubuntu映像的默认命令是“/bin/bash-c”而不是“/bin/sh”,这样当我在Dockerfile中使用RUN时,它会访问bash而不是sh。注意,我说的是同一映像的默认命令,不是我试图构建的映像。我认为在ubuntu映像中没有默认命令。当你跑的时候 $ docker run ubuntu echo hi hi 它运行[“/bin/echo”,“hi”]。您可以通过

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

我认为在
ubuntu
映像中没有默认命令。当你跑的时候

$ docker run ubuntu echo hi
hi
它运行
[“/bin/echo”,“hi”]
。您可以通过运行

$ docker run ubuntu set
2014/06/20 08:38:54 exec: "set": executable file not found in $PATH
set
是shell中的内置命令,但docker试图将其作为外部命令运行

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

FROM ubuntu
RUN ln -sf /bin/bash /bin/sh
[编辑]

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

RUN /bin/bash -c ...
您可以使用:


运行[“/bin/bash”、“-c”、”]

您需要使用docker文件构建自己的容器。请参阅ENTRYPOINT和CMD指令:我已经这样做了。我有一个非常简单的Docerfile,它将ubuntu的入口点从ubuntu的入口点[“/bin/bash”,“-c”]更改过来,但是,当我构建这个图像并运行以下命令docker run ubuntu2 echo hi时,它没有显示任何内容。进一步调查。看来echo hi没有作为字符串传递。当我改为“echo hi”时,它就起作用了<代码>运行ln-sf/bin/bash/bin/sh这是个糟糕的主意。ubuntu将/bin/sh设为破折号是有原因的。dash是一个完全posix外壳,它比bash快几个数量级。将/bin/sh链接到bash将大大降低服务器的性能。引用:@xero,这是在一个docker容器内。我认为这不会有太大影响,因为通常情况下,您不会在容器中运行/etc中的任何脚本。