Docker:在Docker容器中运行nano

134

我可以像这样打开一个交互式的 shell 进入 Docker 容器:

sudo docker exec -t -i {container_name} bash

目前为止一切顺利,但尝试运行nano时出现以下错误:

打开终端时出错:未知错误。


这是哪个容器?另外,你的PATH变量长什么样? - Usman Ismail
9个回答

200
我认为这可能与Docker Issue #9299有关。
该问题中有一些解决方法的评论:
  • 运行容器分配伪TTY(选项-t)。
  • 在容器的进程中执行导出环境变量$TERM=xterm(例如:export TERM=xterm

主要问题似乎实际上是这个 - Pierre de LESPINAY
2
分配伪终端对我没有起作用,但更改“TERM”有用。 - Nathan Osman
这个问题取决于环境,让人感到非常沮丧。对于在Win 10上使用Docker for Windows的Centos 8来说,只有TERM=xterm-color对我有效。serverfault答案 - mdisibio

123

运行命令:export TERM=xterm


1
只是为了澄清。不需要重新启动Docker容器。apt-get install nano。然后导出TERM=xterm。然后nano file.txt。(如果重新启动Docker容器,这将不再存在。) - Chad
工作得很好,只需运行该命令,然后nano就可以工作了,无需重新启动容器。 - Ben Winding

37
你可以添加

ENV TERM xterm

如果您经常使用编辑器,请将此设置添加到Dockerfile中。我们在基本容器中设置了此项,因为我们经常使用vi/emacs调试。


一些问题出现了,当我使用 docker exec -it [CONTAINER_ID] /bin/bash -c "export TERM=xterm; exec bash" 命令时可以正常工作,但是其他方式不行。我在 EXPOSE 语句之前添加了 ENV TERM xterm,这样做正确吗? - Lukas Oppermann
算了,已经“解决”了。基本上我需要在RUN命令之前添加ENV TERM xterm - Lukas Oppermann

30
docker exec -it id_container bash
apt-get update
apt-get install nano
export TERM=xterm

11

如果 $TERM 已经设置为 xterm 但在我的情况下仍不起作用,这里有一个有效的方法:docker exec -it [CONTAINER_ID] /bin/bash -c“export TERM=xterm; exec bash”


9

请在您的容器中运行此命令 apk add nano


2
在一个没有apt-get或yum的容器中工作。谢谢。 - simesy
1
只需这样就可以工作。 - alfonsoolavarria

6

我做了一个变通方法,在我的.bashrc文件中添加了以下内容:

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

这样就不会再出现错误了。


1

0
我不确定我们是否在谈论同一件事,但你需要运行 apt update | apt install nano 命令来在容器中安装它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接