Bash
Docker

dockerでコマンドが変に折り返される...

More than 1 year has passed since last update.


概要

「docker exec -it」コマンドでコンテナに入ると80文字ぐらいで変に折り返され、表示がおかしくなるようになったので、調べてみた結果をメモしておく。


端末の行数および桁数

ターミナルの行数と桁数の設定があるようで、デフォルトが「 桁数:80, 行数:24 」となっているようです。

そのため、80文字を超えると変に折り返されてしまうようだ。。。

root@*********:/# echo $COLUMNS,$LINES

80,24
root@*********:/# stty size
0 0

<参考サイト>

- Fix terminal rows, columns, and type when using old versions of kubectl exec

vagrantで起動したCentOSはターミナルのサイズを変更すると、自動変更してくれるようだが、dockerのコンテナはそうはいかないようだ。

とりあえず、変に折り返されると表示がおかしくなって使いづらいので、設定変更を調べてみる。


環境変数COLUMNS,LINESを使う

docker接続時に環境変数で桁数と行数を指定する。

# コマンドで指定する方法

$ docker exec -it jenkins env COLUMNS=200 LINES=50 TERM=xterm bash

# 「-e」オプションで指定する方法
$ docker exec -it -e COLUMNS=200 -e LINES=50 -e TERM=xterm jenkins bash

<参考サイト>

- Linux コマンドライン画面の表示行数・桁数を変更する

- Docker number of lines in terminal changing inside docker


sttyコマンドを使う

sttyコマンド: 端末ラインの設定を変更・表示する

# jenkinsコンテナへ接続

$ docker exec -it jenkins bash

# 端末の行数および桁数をセットする
root@*********#$ stty rows 50 cols 200

# カーネルが保持している端末の行数および桁数を表示
root@*********$ stty size
50 200

<参考サイト>

- terminal - How to change the width of remote serial console ...

- sttyコマンド

- How do I get more than 80 columns in command line mode?


まとめ

根本的な解決ではないので、Dockerfileなどで環境変数を大きめの値でセットしておくか、

自動でサイズを変更してくれるような仕組みがないかな・・・