bash не работает с помощью инструкции SHELL от Docker - PullRequest
1 голос
/ 14 мая 2019

Мне нужно использовать bash в сценариях конвейера CI / CD, поэтому я пытаюсь использовать этот простой образ:

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 Ответ

2 голосов
/ 14 мая 2019

Команда SHELL изменяет только оболочку, которая используется для выполнения инструкций внутри Dockerfile.

Если вы хотите изменить оболочку, которая используется для среды выполнения контейнера, вы можете добавить CMD ["/bin/bash"] вВаш Dockerfile, чтобы изменить исполняемый файл контейнера по умолчанию на /bin/bash.Вы также можете указать исполняемый файл из командной строки, используя docker run -it <image> /bin/bash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...