docker exec -tiu postgres some_db_container psql db_name
这是一个方便的命令,可以连接到任何有权访问的docker容器,而无需发现应用程序用来连接的用户名和密码。
麻烦的是,此时分配的TTY是疯了。它不知道终端有多大,当它试图包裹线路时它不会断线,如果你试图在中间编辑线路,它就会完全脱离轨道。大多数情况下,在文本编辑器中编写查询并粘贴它更容易。
我想也许是因为在制作容器时没有分配TTY,但是docker-compose中的tty: true
似乎没有效果。
我很惊讶我甚至无法在互联网上找到这个问题的讨论,因为唯一的另一种连接方式是知道容器的IP和用户连接的凭据用。
这有什么问题吗?我每次想要调查问题时都不需要挖掘生产密码,如果我可以解决这个问题,我可以作为postgres用户连接。
答案 0 :(得分:6)
我遇到了同样的问题,经过一些研究后发现了这个答案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
这解决了我的问题。