Так что на самом деле проблем нет - вы успешно запустили докер с файлом внутри.Но до тех пор, пока вы не предоставили дополнительную работу для вашего контейнера, процесс запуска занял 1 секунду.
Сначала вы должны ознакомиться с тем, что в терминологии Docker считается «запущенным» контейнером.Контейнер «работает» до тех пор, пока не будет запущен его основной процесс (PID 1
).Процесс завершается => контейнер останавливается.Если вы хотите, чтобы ваш контейнер продолжал работать (например, в качестве службы), вам нужно поддерживать активный основной процесс.
Во-вторых, каков ваш основной процесс?Это процесс, запускаемый при запуске контейнера.Он состоит из директив ENTRYPOINT
и CMD
(с некоторыми правилами).Этим директивам часто присваивается значение по умолчанию в Dockerfile
, но вы можете их переопределить.Если вы просто запустите docker run <image>
, будут приняты значения по умолчанию, но если вы предоставите некоторые аргументы после <image>
, они переопределят CMD
.
Итак, для alpine
вы можете просто запустить оболочку как docker run -it alpine sh
.И пока вы не выйдете из оболочки, ваш контейнер будет запущен.
И последний.Аргумент -it
соединяет STDIN
и STDOUT/STDERR
с вашей консолью.Таким образом, ваш sh
процесс, который является основным, сохраняется, пока вы не закроете консоль.