Ответ 1
Вы пытаетесь запустить bash
, интерактивную оболочку, для которой требуется tty. Не имеет смысла запускать это в режиме "отсоединения" с помощью -d
, но вы можете сделать это, добавив -it
в командную строку, которая гарантирует, что контейнер имеет действительный tty, связанный с ним, и что stdin
остается подключенным:
docker run -it -d -p 52022:22 basickarl/docker-git-test
Обычно вы запускаете какой-то долгоживущий неинтерактивный процесс (например, sshd
, или веб-сервер, или сервер базы данных, или диспетчер процессов, например systemd
или supervisor
), при запуске отсоединенного контейнеры.
Если вы пытаетесь запустить службу типа sshd
, вы не можете просто запустить service ssh start
. Это будет - в зависимости от распределения, которое вы используете внутри вашего контейнера, - сделайте одно из двух:
-
Он попытается связаться с диспетчером процессов, например
systemd
илиupstart
, чтобы запустить службу. Поскольку нет диспетчера служб, это не сработает. -
Начнется
sshd
, но он будет запущен в фоновом режиме. Это означает, что (a) вышла командаservice sshd start
, что означает, что (b) Docker считает ваш контейнер неудачным, поэтому он очищает все.
Если вы хотите запустить только ssh в контейнере, рассмотрите пример типа this.
Если вы хотите запустить sshd
и другие процессы внутри контейнера, вам нужно будет изучить какой-то диспетчер процессов.