Docker требует, чтобы основной процесс продолжал работать на переднем плане. В противном случае он считает, что приложение остановлено, и он закрывает контейнер.
В вашем случае -i
означает, что STDIN остается открытым, даже если он не подключен, а -t
означает выделение псевдо-tty. Они просто значимы, когда контейнер работает.
Но работа контейнера не зависит от вышеперечисленных флагов, они зависят от основного процесса. Здесь это echo test
, он выполняется и затем завершается, поэтому контейнер обнаружил, что основной процесс завершен, он завершился.
Если вы замените CMD
на RUN
, тогда он будет использовать значение по умолчанию CMD
, то есть /bin/bash
, см. Докер файл Centos здесь , и /bin/bash
не выйдет автоматически, поэтому контейнер не выходит.