Запустите докер с только что скопированным файлом внутри - PullRequest
0 голосов
/ 22 января 2019

Я создаю изображение, которое просто содержит скопированный файл, со следующим Dockerfile:

FROM alpine:3.8

COPY ./somefile /srv/somefile

Когда я пытаюсь docker run изображение, оно сразу выходит, то есть сразу послеdocker run У меня есть:

Exited (0) 1 second ago.

Я пытался добавить CMD ["/bin/sh"] или ENTRYPOINT ["/bin/sh"], но это ничего не меняет.

Можно ли создать такой контейнер с только что скопированным файлом и сделать его готовым к работе, пока я не остановлю его?

1 Ответ

0 голосов
/ 22 января 2019

Так что на самом деле проблем нет - вы успешно запустили докер с файлом внутри.Но до тех пор, пока вы не предоставили дополнительную работу для вашего контейнера, процесс запуска занял 1 секунду.

Сначала вы должны ознакомиться с тем, что в терминологии Docker считается «запущенным» контейнером.Контейнер «работает» до тех пор, пока не будет запущен его основной процесс (PID 1).Процесс завершается => контейнер останавливается.Если вы хотите, чтобы ваш контейнер продолжал работать (например, в качестве службы), вам нужно поддерживать активный основной процесс.

Во-вторых, каков ваш основной процесс?Это процесс, запускаемый при запуске контейнера.Он состоит из директив ENTRYPOINT и CMD (с некоторыми правилами).Этим директивам часто присваивается значение по умолчанию в Dockerfile, но вы можете их переопределить.Если вы просто запустите docker run <image>, будут приняты значения по умолчанию, но если вы предоставите некоторые аргументы после <image>, они переопределят CMD.

Итак, для alpine вы можете просто запустить оболочку как docker run -it alpine sh.И пока вы не выйдете из оболочки, ваш контейнер будет запущен.

И последний.Аргумент -it соединяет STDIN и STDOUT/STDERR с вашей консолью.Таким образом, ваш sh процесс, который является основным, сохраняется, пока вы не закроете консоль.

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