それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

dockerでターミナルが変な折り返しで辛い現象を何とか解決する

docker でターミナルの折返しがキツイ

Dockerでbash などの ttyで接続すると、横幅サイズがおかしくなるとの、折返し時に、妙なイチに折り返すのでキツイ。

github のissue スレ見てるとエラーの原因は docker exec -it を実行したときに、 /exec/${EXEC-ID}/resize" が実行されないことにあるらしい

折り返しがおかしくなる例

f:id:takuya_1st:20180524170711p:plain

幅がおかしくなる例

f:id:takuya_1st:20180524170546p:plain

折り返すのがおかしくなるのは、linesが合わないことに依るもので、幅がおかしくなるのはcolsが合わないことによる。

そのうち解決されるんだろうけど

いずれバブフィックスで治りそうだけど、いま辛い。

とりあえず治す方法

docker exec -e COLUMNS=$(tput cols) -e LINES=$(tput lines) -it CONTAINER_ID bash

MySQL などのコマンドも同じく

docker exec -e COLUMNS=$(tput cols) -e LINES=$(tput lines) -it CONTAINER_ID mysql -p -u MYSQL_USER DATABASE

docker側の問題で利用者の私達に環境が原因ということでもなく、 bash を割当てている tty に設定が届かないことによるので、環境変数で明示的に設定してまえば、何とか回避することが出来る。

dockerfile の環境変数bash起動時になにか実行することで解決もできそうだけど、dockerfile や環境変数をすべてのインスタンスに書くのは現実的じゃないので、exec 実行時にフィッティングするのが妥協点っぽい

解決した

とりあえず解決する。

f:id:takuya_1st:20180524172308p:plain

これでしばらくは戦える。

サイズは sttyかtput で確認ができる。

stty をつかうか、 tput を使うことで、現在開いているターミナルのサイズをしって、ソレを使うことが出来る。

takuya@sakura:~$ tput  lines
52
takuya@sakura:~$ stty size
52 180
takuya@sakura:~$ tput cols
180
takuya@sakura:~$ tput lines
52

参考資料

https://github.com/moby/moby/issues/35407