lisz-works

プログラミングと興味を貴方に

MSYS2xDockerでnode.jsを動かす「the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'」の解決

【スポンサーリンク】

MSYS2 × Docker Toolbox

Angular使ってみようと思って、指示通りにコイツを実行したらエラーが出た。

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

このメッセージを解決して、MSYS2上のDockerを使って、Node.jsのコンソールを実行します!

pacmanでwinptyをインストール

pacmanでwinptyをインストールします。

$ pacman -S winpty

それにしてもaptとかだと「install」なのに、pacmanは「-S」だからどうにも忘れます。

winptyを使う

winptyがインストールできたら、言われたとおりコレを使ってdocker-composeを使ってみます。

$ winpty docker-compose exec node bash
root@554ff6068515:/projects# node
Welcome to Node.js v12.13.0.
Type ".help" for more information.
>
> console.log('hello node');
hello node
undefined
>

いけた!

一連の流れでwinpty付けても大丈夫だった

念の為docker-composeを使っていた

  1. up
  2. exec
  3. down

をwinptyを付けて実行してみたが、特に問題なく動作しているようでした。

$ winpty docker-compose up -d
Creating network "angular-handson_default" with the default driver
Creating angular-handson_node_1 ... done

$ winpty docker-compose exec node bash
root@baf857092972:/projects# exit
exit

$ winpty docker-compose down
Stopping angular-handson_node_1 ... done
Removing angular-handson_node_1 ... done
Removing network angular-handson_default

ということで、設定からdocker-composeのaliasを修正します。

設定の編集

設定ファイルにアクセスして

$ vim /etc/profile.d/portabledevops.sh

ここのelse側の「alias dc=~」を

# portable docker toolbox
if [ -d $PORTABLEPATH/dockertoolbox ]; then
    PATH=$PORTABLEPATH/dockertoolbox:$PATH
    alias dm=$PORTABLEPATH/dockertoolbox/docker-machine.exe
    alias dc=$PORTABLEPATH/dockertoolbox/docker-compose.exe
      (中略)
else
    alias dm=/usr/local/bin/docker-machine.exe
    alias dc=/usr/local/bin/docker-compose.exe ←ここ
    denv(){
        eval $(docker-machine env "$@")
    }
    export -f denv
fi

このように変更します。

alias dc='winpty /usr/local/bin/docker-compose.exe'

確認

一連の流れを確認します。

$ dc up -d
Creating network "angular-handson_default" with the default driver
Creating angular-handson_node_1 ... done

$ dc exec node bash
root@65c756b49a34:/projects# exit
exit

$ dc down
Stopping angular-handson_node_1 ... done
Removing angular-handson_node_1 ... done
Removing network angular-handson_default

うまく動きました!

あとがき

MSYS2xDockerでnode.jsを動かすでした!

知らないことをしていて、知らないメッセージ出ると焦りますよね……

いつものことなんですが……(笑)