如何更正 `docker exec psql` 终端大小?

7

docker exec -tiu postgres some_db_container psql db_name

这是一条十分方便的命令,可以连接到任何有权限访问的Docker容器,而无需查找应用程序用于连接的用户名和密码。

问题在于,此时分配的TTY非常不稳定。它不知道终端的大小,尝试换行时不会进行换行,并且如果你尝试在中间编辑该行代码,则会完全失控。大多数情况下更容易在文本编辑器中编写查询并将其粘贴进去。

我认为可能是因为在创建容器时没有分配TTY,但是在docker-compose中使用tty:true似乎没有产生效果。

我很惊讶在互联网上找不到解决此问题的讨论,因为仅其他一种连接方法是要知道容器的IP地址和连接的用户凭据。

是否有某种解决方法?如果能解决这个问题,我就不必每次想调查问题时都要挖出生产密码,而可以以postgres用户身份连接。

1个回答

14

我遇到了同样的问题,在进行一些调研后,找到了这个答案:https://github.com/moby/moby/issues/33794#issuecomment-312873988

关键在于告诉容器中的终端它的大小。

docker exec -tiu -e COLUMNS="`tput cols`" -e LINES="`tput lines`" postgres some_db_container psql db_name

这对我解决了问题。


1
我还发现连接后可以调整终端大小。我的终端仿真器可以通过按F11键来实现,所以我只需要按两次即可。如果你在控制台中,这并没有什么帮助,但这种情况现在非常少见。 - Altreus
1
如果您想使用 ps aux 命令来查看正在运行的微服务,请使用以下命令:docker exec -it -e COLUMNS=200 8855160e50fc ps aux。 :) - Sridhar Sarnobat

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