Докер: запуск nano в контейнере докера

128

Я открываю интерактивную оболочку в контейнере докера вот так

sudo docker exec -t -i {container_name} bash

Пока все хорошо, но попытка запустить nanoприводит к:

Ошибка открытия терминала: неизвестно.

Майлз МакДоннелл
источник
Что это за контейнер? также как выглядит ваша переменная PATH?
Усман Исмаил

Ответы:

196

Я думаю, это может быть связано с проблемой Docker # 9299 .

В этой проблеме есть некоторые обходные пути:

  • Запустите контейнер, назначающий псевдо-TTY (опция -t).
  • Экспорт переменной окружения $ TERM = Xterm в процессе запуска контейнера в Exec (то есть: export TERM=xterm)
Хавьер Кортехосо
источник
На самом деле, главная проблема, кажется, вот в чем
Пьер де ЛЕСПИНЭ
2
Назначение псевдо-TTY для меня не сработало, а вот изменение - сработало TERM.
Натан Осман,
Эта проблема расстраивает в зависимости от среды. Для Centos 8 с использованием Docker для Windows на Win 10, TERM=xterm-colorпохоже, работает только для меня. ответ serverfault .
mdisibio
123

Запустить команду: export TERM=xterm

Нареш Валиа
источник
1
просто для уточнения. без перезапуска док-контейнера. apt-get install nano. затем экспортируйте TERM = xterm. Затем nano file.txt. (Этого не будет, если вы перезапустите свой докер-контейнер.)
Чад
Сработал нормально, просто выполнил эту команду, а затем nano сработало, без перезапуска контейнера
Бен Виндинг
36

Можете добавить

ENV TERM xterm

в ваш Dockerfile, если вы будете регулярно использовать редактор. У нас есть этот параметр в нашем базовом контейнере, поскольку мы постоянно отлаживаем вещи с помощью vi / emacs.

seanmcl
источник
Как-то у меня это не работает, но docker exec -it [CONTAINER_ID] /bin/bash -c "export TERM=xterm; exec bash"работает нормально. Я только что добавилENV TERM xterm перед EXPOSEутверждением, это правильно?
Лукас Опперманн
Неважно, "решил" это. В основном мне нужно было добавить ENV TERM xtermперед RUNкомандой.
Лукас Опперманн
20
docker exec -it id_container bash
apt-get update
apt-get install nano
export TERM=xterm
alfonsoolavarria
источник
10

так как $TERM уже было установлено, xtermно все еще не работает для меня, вот способ, который сработал:docker exec -it [CONTAINER_ID] /bin/bash -c "export TERM=xterm; exec bash"

Фил
источник
5

Я сделал обходной путь, в моем .bashrc я добавил:

alias nano='export TERM=xterm && nano'

В этом случае ошибка больше не появляется

workdreamer
источник
0

Запустите эту команду в своем контейнере apk add nano

Раванд Саид
источник