我需要在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
?
答案 0 :(得分:2)
SHELL
命令仅修改用于执行Dockerfile内部指令的shell。
如果要更改用于容器运行时的shell,可以将CMD ["/bin/bash"]
添加到Dockerfile中,以便将容器默认可执行文件更改为/bin/bash
。您还可以使用docker run -it <image> /bin/bash
从命令行指定可执行文件。