Git BashでWindowsにインストールしたdockerを実行する場合には「winpty docker ...」と入力するというメモです。
確認環境
C:\Users\hoge>docker --version Docker version 20.10.6, build 370c289 minitty 3.4.4
起こった事象と対処
以下のように、Git Bashから、Windows側のdockerを実行しようとしたところwinptyを付けて実行するように言われました。
hoge@hoge-asus MINGW64 ~/Downloads $ docker run --rm -it python:3.8.10 bash the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
いわれた通りwinptyを付けて実行したところ、正しい結果が得られました
hoge@hoge-asus MINGW64 ~/Downloads $ winpty docker run --rm -it python:3.8.10 bash root@64c0d58524eb:/#
winptyとは?その役目は?
下記の記事にwinptyとは何かや、ptyとは何か、docker以外でwinptyを使うべき場面など、丁寧に記載されていました。
mseeeen.msen.jp
上の記事によると、winptyとは
Windows のコンソールプログラムと UNIX の仮想端末を通信させるためのインタフェース
ということだそうです。minittyからWindows側のプログラムを実行する場合に、minitty⇔Windowsの差異を良しなに解消してくれるものみたいです。
winptyを付けた結果/付けない結果
上記の記事に紹介されているminittyでの「ipconfig」の実行について、手元の環境でwinptyあり、なしそれぞれで実行してみました。
# winptyなし→文字化ける hoge@hoge-asus MINGW64 ~/Downloads $ ipconfig Windows IP Configuration Wireless LAN adapter ▒▒▒[▒J▒▒ ▒G▒▒▒A▒ڑ▒* 1: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : # winptyあり→文字化けない hoge@hoge-asus MINGW64 ~/Downloads $ winpty ipconfig Windows IP 構成 Wireless LAN adapter ローカル エリア接続* 1: メディアの状態. . . . . . . . . . . .: メディアは接続されていません 接続固有の DNS サフィックス . . . . .:
なるほど、minitty→UTF-8、ipconfig→結果はSJISですが、winptyが文字コードを変換してくれていますね。
これからminittyでWindows側のプログラムを呼び出す場合はwinptyを付けるようにしよう。