Как запустить файл инициализации и файл сценария оболочки в docker file CMD при использовании centos / systemd в качестве базового образа?

#linux #image #docker #containers

#linux #изображение #docker #контейнеры

Вопрос:

Мой базовый образ — это centos/systemd.so мой cmd, который будет содержать /usr/sbin/init , но я также хочу запустить файл сценария оболочки при создании контейнера.

мой файл Dockerfile:

 FROM centos/systemd

#RUN yum -y install dos2unix


CMD ["usr/sbin/init"]   //here i also want to launch a shell script file
  

Комментарии:

1. Что вы уже пробовали? Нужен ли вам systemd, и если да, то зачем? Другой очевидной альтернативой является преобразование вашего скрипта в модульный файл systemd.

2. @DavidMaze init — это двоичный файл, поэтому мы не можем переделать мой скрипт в файл инициализации systemd. Я не хочу, чтобы systemd запускал некоторые процессы, и для systemd есть много других причин

Ответ №1:

Редактировать с помощью решения:

 FROM centos/systemd 

ADD /path-to-hello/hello.sh ./ 
ENTRYPOINT ["./hello.sh"]
  

Последняя строка в hola.sh exec /usr/sbin/init

Сборка docker: docker build -t DockerImageName:1.0 .

Запустите docker: docker run --name DockerName DockerImageName:1.0

Комментарии:

1. можете ли вы дать подробное объяснение использования —init.my вариант использования: мне нужно запустить /usr/sbin/init и файл сценария оболочки при создании контейнера, но файл docker может содержать только один cmd

2. Я думаю, вам нужно использовать ENTRYPOINT , а не CMD . Последняя строка в вашем скрипте может быть exec /usr/sbin/init , и с ее помощью вы можете запустить свой скрипт и /usr/sbin/init при создании контейнера. Я думаю, вам нужно использовать ENTRYPOINT , а не `CMD . The last line in your script can be exec / usr / sbin / init`, и с его помощью вы можете выполнить свой скрипт и `/ usr / sbin / init` при создании контейнера.

3. предположим, что имя моего файла оболочки hello.sh и сервис — это /usr/sbin/init, как запускать оба, когда создается контейнер

4. FROM centos/systemd ADD /path-to-hello/hello.sh ./ ENTRYPOINT ["./hello.sh"] Последняя строка в hola. sh — это exec /usr/ sbin/init Build docker: docker build -t DockerImageName:1.0 . Запустите docker: docker run --name DockerName DockerImageName:1.0