Почему команда RUN в этом dockerfile не работает - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть образ докера (MyBaseImage), где у меня установлен Open SSH сервер. Теперь в файле Docker у меня есть следующее.

#Download base image
FROM MyBaseImage

RUN service ssh start

Я создаю новое изображение, набрав

docker build .

Docker отлично строит образ, предоставляя следующую информацию.

Step 1/2 : FROM MyBaseImage
 ---> 56f88e347f77
Step 2/2 : RUN service ssh start
 ---> Running in a1afe0c2ce71
 * Starting OpenBSD Secure Shell server sshd                             [ OK ]
Removing intermediate container a1afe0c2ce71
 ---> 7879cebe8b6a

Но когда я запускаю новое изображение, набирая

docker run -it 7879cebe8b6a

Набрав следующее в терминале контейнера

service ssh status

т

* sshd is not running

Затем я должен вручную запустить сервер Open SSH, набрав service ssh start.

В чем может быть причина?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Если вы посмотрите на вашу сборку, вы увидите запуск службы ssh в промежуточном контейнере, который будет удален на следующем этапе сборки:

 ---> Running in a1afe0c2ce71
 * Starting OpenBSD Secure Shell server sshd                             [ OK ]
Removing intermediate container a1afe0c2ce71

Чтобы запустить службу в Dockerfile, вы должны использовать оператор CMD или ENTRYPOINT в качестве последней строки (в зависимости от того, хотите ли вы передать аргумент в команде docker run ..., обычно.

Как правило, служба будет запускаться в фоновом режиме как демон, поэтому в качестве последней строки укажите:

CMD ["service", "ssh", "start"] 

Не будет работать, так как контейнер выйдет, так как он не имеет никакого отношения к

Что вы, вероятно, хотите (из документации докера ) это:

CMD ["/usr/sbin/sshd", "-D"]

Запускает службу на переднем плане, чтобы контейнер оставался в живых.

Эта ссылка содержит полезную информацию о разнице между CMD и ENTRYPOINT, а также о разнице между форматами exec и shell.

0 голосов
/ 29 апреля 2018

В зависимости от того, какой дистрибутив Linux вы используете, команда немного меняется.

Если вы используете Ubuntu, ваша команда запуска должна работать. Но если ваше базовое изображение является centos / RHEL, попробуйте service sshd start

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