bash无法使用Docker的SHELL指令工作

时间:2019-05-13 21:54:07

标签: bash docker dockerfile

我需要在CI / CD管道的脚本中使用bash,所以我尝试使用以下简单图像:

FROM alpine:3.4
RUN apk update -q && apk add --no-cache bash -q
SHELL ["/bin/bash", "--login", "-c"]
RUN echo $0

我在终端中得到的是这样:

$ docker build .
    Sending build context to Docker daemon  2.048kB
    Step 1/4 : FROM alpine:3.4
     ---> b7c5ffe56db7
    Step 2/4 : RUN apk update -q && apk add --no-cache bash -q
     ---> Using cache
     ---> 18b729da453c
    Step 3/4 : SHELL ["/bin/bash", "--login", "-c"]
     ---> Using cache
     ---> 03ca0df4a543
    Step 4/4 : RUN echo $0
     ---> Running in a65419dafc4b
    /bin/bash
    Removing intermediate container a65419dafc4b
     ---> 2963f9e0e563
    Successfully built 2963f9e0e563

然后,我运行该容器并得到:

$ docker run -it 2963f9e0e563
/ $ echo $0
/bin/sh
/ $ 

(它以root用户身份运行,但我为此帖子将“#”更改为“ $”)

为什么使用sh而不是bash

1 个答案:

答案 0 :(得分:2)

SHELL命令仅修改用于执行Dockerfile内部指令的shell。

如果要更改用于容器运行时的shell,可以将CMD ["/bin/bash"]添加到Dockerfile中,以便将容器默认可执行文件更改为/bin/bash。您还可以使用docker run -it <image> /bin/bash从命令行指定可执行文件。