LoginSignup
5
3

More than 5 years have passed since last update.

docker exec のターミナルサイズを補正するワークアラウンド

Last updated at Posted at 2018-04-27

はじめに

docker exec するとターミナルサイズが適切に設定されないようです。
取り急ぎ、理由は調べていませんが、ワークアラウンドを用意したのでメモします。

ちなみに

端末サイズの変更には追従してくれます。最初だけ、です。

現象の確認

先んじて現象の確認方法を示します。もし現象が再現しないようならワークアラウンドは不要ということです。

docker run は問題ない

$ stty size
24 80
$ docker run --rm -t -i hogehoge bash -l
[inner-prompt]$ stty size
24 80

docker exec だとダメ

$ stty size
24 80
$ docker exec -t -i foobar bash -l
[inner-prompt]$ stty size
0 0

ワークアラウンド

今のターミナルサイズを stty を使って能動的にセットします。
ただ手打ちはダルさんなので(半)自動化します。

自動設定コマンドライン生成スクリプトを用意

setuptty.sh
#!/bin/sh

val=$(stty size)

rows=$(echo $val | cut -d ' ' -f 1)
cols=$(echo $val | cut -d ' ' -f 2)

echo "stty rows $rows cols $cols"

docker exec を工夫する

$ stty size
24 80
$ docker exec -t -i foobar sh -c "$(setuptty.sh); exec bash -l"
[inner-prompt]$ stty size
24 80
$ stty size
24 80
$ docker-compose exec zervize sh -c "$(setuptty.sh); exec bash -l"
[inner-prompt]$ stty size
24 80

私は貧乏性なので exec hoge してプロセス数を減らします。
"; exec" までスクリプトで echo しても良いのですけれど、構文が汚くなるので我慢します。exec したくないケースもあるかも知れませんし。

おわりに

個人的にはコンテナに ssh するのが好きなので(他の仮想化と対照的で良い)、あんまり exec bash しないです。
docker-ce for Ubuntu 18.04 早く出ないかなー。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3