エンジニアのはしがき

プログラミングの日々の知見を書き連ねているブログです

git bashからdocker runする時にはwinptyを頭につける

f:id:tansantktk:20210314153409p:plain

Dockerを触っていて、ちょっと気づいたことがあったので書き残しておきます。

git bashからDockerコンテナが起動できない?

docker runでDockerイメージからコンテナを生成して起動させる場合、以下のようなコマンドを叩くと思います。

$ docker run --rm --name hoge-app -p 4200:4200 -it hoge-app bash

しかしgit bashをターミナルにした場合は以下の警告メッセージが出力され、実行できません。

the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

minttyを使っているならコマンドの頭にwinptyを付けろと言われました。

$ winpty docker run --rm --name hoge-app -p 4200:4200 -it hoge-app bash

言われた通りにwinptyを付けるとちゃんと実行されます。

winpty?

git bashはデフォルトだと、minttyというターミナルエミュレータで動作しており、 minttyのおかげでWindows上でもUNIXライクなコマンドが使えるようになっています。

しかし、minttyからpythonipconfig等のWindows上のプログラムを実行した場合、 互換性の問題から正しく実行できない場合が出てくるようです。

winptyはminttyからでもWindows上のプログラムとの入出力を正しく解釈できるように調整をしてくれます。

docker runの場合は警告が出ますので、思考停止でwinptyを頭に付けて差支えはなさそう。

git bashはあくまでgit bashであって、bashではないのね…