在Docker容器中运行emacs
我正在使用Mac并想在Docker容器中运行emacs。 有没有一个首选的方法来解决这个问题? 在我的stream程中,我得到了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?
我应该用什么tset? 还是有一个首选的方式来运行Docker容器中的emacs?
为了编辑容器内的文件,正如Bryan所说,通常最好使用主机上的卷和编辑器。 事实上,不应该编辑不在卷中的文件,因为当容器被移除时,更改将会丢失。
但是,在容器中运行编辑器甚至GUI应用程序是非常有可能的。 为了运行命令行版本的emacs,我所要做的只是:
$ docker run -it debian /bin/bash root@02bd877c1052:/# apt-get update && apt-get install -y emacs23-nox root@02bd877c1052:/# emacs
我已经用boot2docker和docker在Linux上本地运行了。 我认为你的问题是因为emacs试图启动X版本的emacs,默认情况下它不会工作,因为没有运行XServer。
如果你想在一个容器中运行一个GUI应用程序,你有几个select:
- 使用VNC或类似的
- 使用ssh -x来执行X转发(需要xquartz等XServer)
- 在容器中装入xsocket(同样需要一个XServer,我不确定xquartz是如何工作的,而且暴露xsocket也有一些安全问题)
请不要认为容器不能用于交互式应用程序。 这样做有很多原因,包括安全性。 子用户项目使用Docker来运行交互式应用程序,并详细说明为什么这可能是一个好主意。
正如Adrian Mouat 在他的评论中提到的那样:
export TERM=xterm
并且你可以运行emacs(注意,尽pipe如此,你将永远不得不双击Cp移到上一行,因为Docker)。
在容器中运行编辑器并不是一个好主意。 容器适用于服务,而不是交互式应用程序。 如果尝试,所有input和输出都将通过Docker守护程序通过进程(emacs)通过http通道复用到Docker CLI。 另外,如果您正在编辑的文件在容器的分层文件系统中,那么也会增加额外的开销。
正如Docker所言 ,卷是更好的select:
你也可以从你自己的主机上挂载一个目录到一个容器中。
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
这会将本地目录/ src / webapp挂载到容器中,作为/ opt / webapp目录。 这对于testing非常有用,例如,我们可以将源代码安装在容器中,并在更改源代码时查看我们的应用程序。
请注意, 从Docker 1.3开始 , -v
开关也将从外部的Mac工作。
- docker拉让我错误:“下载失败,重试:x509:由未知权威签名的证书”
- docker化的PHP应用程序体系结构最佳实践
- 从Docker文件初始化谷歌云数据
- Nginx代理服务器返回错误的IP地址
- 与Angular 4和Django的Docker编译成功,但localhost:4200不能正常工作
- 可能? 如何在Google托pipe虚拟机环境中设置VNC
- 使用wkhtmltopdf,ASP.NET Core中的docker将HTML转换为PDF
- Docker PostgreSQL 9.6 – 安装扩展plpython3u(与分位数扩展冲突)
- 如何从Postgres docker镜像更改postgresql.conf