Опция Docker -it не будет работать с ENTRYPOINT или CMD в Dockerfile - PullRequest
0 голосов
/ 04 сентября 2018

Я новичок в Docker, когда я запускаю свой образ докера с параметром -it, контейнер докера завершает работу, выдает «тест», как указано в моем файле докера, и завершается с нулем. Ожидаемое поведение должно состоять в том, что docker держит открытый виртуальный терминал контейнера: docker run -it test Вот мой файл Docker:

FROM centos
CMD echo test

Я пробовал и CMD, и ENTRYPOINT, и как форму оболочки, так и форму exec, поведение одинаковое. Однако, если я заменю CMD на RUN в файле Docker, опция -it может работать нормально.

1 Ответ

0 голосов
/ 04 сентября 2018

Docker требует, чтобы основной процесс продолжал работать на переднем плане. В противном случае он считает, что приложение остановлено, и он закрывает контейнер.

В вашем случае -i означает, что STDIN остается открытым, даже если он не подключен, а -t означает выделение псевдо-tty. Они просто значимы, когда контейнер работает.

Но работа контейнера не зависит от вышеперечисленных флагов, они зависят от основного процесса. Здесь это echo test, он выполняется и затем завершается, поэтому контейнер обнаружил, что основной процесс завершен, он завершился.

Если вы замените CMD на RUN, тогда он будет использовать значение по умолчанию CMD, то есть /bin/bash, см. Докер файл Centos здесь , и /bin/bash не выйдет автоматически, поэтому контейнер не выходит.

...