Docker определяет более одной команды по умолчанию в Dockerfile
Если у меня есть файл Docker, который имеет в конце:
ENTRYPOINT /bin/bash
и запустить контейнер через docker run
и введите в терминале
gulp
это дает мне бегущий глоток, который я могу легко прекратить с Ctrl+C
но когда я ставлю gulp
как команда по умолчанию для Dockerfile
сюда:
CMD ["/bin/bash", "-c", "gulp"]
или это:
ENTRYPOINT ["/bin/bash", "-c", "gulp"]
затем, когда я запускаю контейнер через docker run
gulp
работает, но я не могу завершить его через Ctrl+C
горячая клавиша.
Docker file, который я использовал для создания образа:
FROM node:8
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y libltdl-dev
WORKDIR /home/workspace
RUN npm install gulp -g
#works but cant kill gulp with Ctrl+C
#CMD ["/bin/bash", "-c", "gulp"]
#works but cant kill gulp with Ctrl+C
#ENTRYPOINT ["/bin/bash", "-c", "gulp"]
# need to type command gulp in cli to run it
# but I'm able to terminate gulp with Ctrl+C
ENTRYPOINT /bin/bash
Для меня имеет смысл, что я не могу завершить команду по умолчанию для контейнера, который определен в Docker file, потому что не было бы никакой другой команды, которая могла бы выполняться после того, как я завершу работу по умолчанию.
Как я могу указать в Docker file, что я хочу запустить /bin/bash
по умолчанию и вдобавок к этому gulp
так что если я прекратить gulp
Я вернусь к bash
приглашение командной строки?
2 ответа
Поскольку gulp
это инструмент для сборки, вы обычно запускаете его в процессе сборки своего контейнера, а не во время его запуска. Ваш Dockerfile может выглядеть примерно так
FROM node:8
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install
COPY . ./
RUN gulp
CMD yarn run start
Когда ты бежишь docker build
по пути он будет распечатывать такие вещи, как
---> b35f4035db3f
Step 6/7 : RUN gulp
---> Running in 02071fceb21b
Важно то, что последняя шестнадцатеричная строка, которая выводится на каждом шаге (строка перед каждой командой Dockerfile), является действительным идентификатором образа Docker. Если ваша сборка идет не так, вы можете
host$ sudo docker run --rm -it b35f4035db3f bash
root@38ed4261ab0f:/app# gulp
Как только вы закончите отладку проблемы, вы можете проверить все исправления в вашей системе управления версиями и перестроить образ по мере необходимости позже.
Gulp - это инструмент для сборки, который вам нужно установить с помощью команды run. Это зафиксирует изменения поверх вашего базового образа.
Если вы хотите использовать ее в качестве команды по умолчанию, используя ENTRYPOINT или CMD в вашем dockerfile, то вы определенно не можете уничтожить ее с помощью ctrl+c, поскольку это не процесс оболочки, а фактически выполняемый вами контейнер.
Если в случае, если у вас есть ваш dockerfile, ENTRYPOINT. Вы можете остановить контейнер с помощью Docker Stop.
ПРИМЕЧАНИЕ. Контейнер не может быть уничтожен с помощью Ctrl + C, его необходимо остановить с помощью:
остановка докера имя_ контейнера