Для редактирования файлов внутри контейнера обычно лучше использовать тома и редактор на хосте, как предлагает Брайан. Фактически, вы никогда не должны редактировать файл, который не находится в томе, поскольку ваши изменения будут потеряны при удалении контейнера.
Однако вполне возможно и полезно запускать редакторы и даже графические приложения внутри контейнеров. Для того, чтобы запустить версию командной строки Emacs, все, что я должен был сделать:
$ docker run -it debian /bin/bash
[email protected]:/# apt-get update && apt-get install -y emacs23-nox
[email protected]:/# emacs
Я проверил это с boot2docker и Докер работает изначально на Linux. Я думаю, ваша проблема состояла в том, что emacs пыталась запустить X-версию emacs, которая не будет работать по умолчанию, поскольку не работает XServer.
Если вы хотите запустить приложение с графическим интерфейсом внутри контейнера, у вас есть несколько вариантов:
- Используйте VNC или аналогичные
- Использование SSH -x сделать переадресацию X (требуется XServer таких как xquartz)
- Установите xsocket внутри контейнера (опять-таки требует XServer, и я не знаю, как он будет работать с xquartz, также есть некоторые проблемы безопасности с обнажая xsocket)
Не считайте, что контейнеры не должны использоваться для интерактивных приложений. Этому есть много причин, включая безопасность. subuser project использует Docker для запуска интерактивных приложений и подробно рассказывает о том, почему это может быть хорошей идеей.
Это не очень хорошая идея. Контейнеры хорошо работают для сервисов, а не для интерактивных приложений. Все входные и выходные данные мультиплексируются по каналу http из процесса (emacs) в Docker CLI через демона Docker. – Bryan
Вы используете Boot2Docker? Что вы пытаетесь достичь, запустив emacs таким образом? – Bryan
Спасибо @bryan. Я хочу отредактировать код, который был извлечен экземпляром Docker, чтобы помочь в разработке кода. например, команда Docker запускала «git clone repo ...» И я хочу отредактировать файлы, которые были клонированы. –