在docker容器中运行emacs

Joh*_*gue 18 emacs docker

我正在使用Mac并希望在我的docker容器中运行emacs.有没有一种解决这个问题的首选方法?在我的流程中,我得到stuc,因为没有设置DISPLAY/TERM

> docker exec -it c6a7a76db84c bash
> sudo apt-get install emacs
...
> oot@c6a7a76db84c:/var/log/apache2# emacs
Please set the environment variable DISPLAY or TERM (see `tset').
> oot@c6a7a76db84c:/var/log/apache2# tset
tset: unknown terminal type unknown
Terminal type?
Run Code Online (Sandbox Code Playgroud)

我应该为tset使用什么?或者有一种在docker容器中运行emacs的首选方法吗?

Adr*_*uat 11

为了编辑容器内的文件,通常最好在主机上使用卷和编辑器,正如Bryan所说.实际上,您永远不应该编辑不在卷中的文件,因为删除容器时您的更改将会丢失.

但是,在容器内运行编辑器甚至GUI应用程序是非常有可能和有用的.为了运行emacs的命令行版本,我所要做的就是:

$ docker run -it debian /bin/bash
root@02bd877c1052:/# apt-get update && apt-get install -y emacs23-nox
root@02bd877c1052:/# emacs
Run Code Online (Sandbox Code Playgroud)

我用boot2docker和docker在Linux上本地运行测试了这个.我认为你的问题是因为emacs试图启动emacs的X版本,默认情况下这不会工作,因为没有运行XServer.

如果要在容器内运行GUI应用程序,可以选择以下几种方法:

  • 使用VNC或类似的
  • 使用ssh -x进行X转发(需要XServer如xquartz)
  • 将xsocket挂载到容器内(同样需要XServer,我不确定它如何与xquartz一起使用,也暴露xsocket存在一些安全问题)

请不要相信容器不应用于交互式应用程序.这样做有很多原因,包括安全性.子用户项目使用Docker来运行交互式应用程序,并详细说明为什么这可能是一个好主意.

  • TERM设置为xterm给我.在运行emacs之前尝试执行`export TERM = xterm`.可能是docker或boot2docker中的错误. (4认同)

met*_*mit 11

正如Adrian Mouat 在评论中提到的,只需:

export TERM=xterm
Run Code Online (Sandbox Code Playgroud)

并且你将能够运行emacs(但请注意,你将不得不双重输入Cp以移动到上一行,因为Docker).