Windows のコンソールで Docker やってて Ctrl+z 押してしまったら
...しまったら、Dockerコンテナからexitしてしまいます。
私がした対処と対策をメモしておきます。
同じことをして対処に困っている方で、かつexit前にtmuxを使っていなかった場合は、この先を読んでも意味ないかもしれません。
(ただ、tmuxはお勧めです。今回のような切断だけでなく、sshが切断されたときにも同じやり方で復帰できます。)
- 対処に必要なもの : tmux
- 対策に必要なもの : Cmder
対処
dockerコンテナ上でtmuxを使っていました。
なので、tmuxのセッションが残っていたため復帰できました。
下記、復帰の方法です(tmuxのプレフィクスがctrl+b
であるという前提です)。
- コンテナにログインする
- tmuxを起動する
- コマンド入力
ctrl+b -> s
- 表示されるセッションリストから上下キーでexitしてしまったセッションが残っている確認する(e.g. vim中にexitしてしまったらvimの画面が開いているセッションが残っているはずです)
- exitしてしまったセッションが見つかったら、それをEnterで選択する
以上で復帰できるはずです。
対策
対策には、Cmderのホットキー機能へのマクロ割り当て機能を使います。
ctrl+zに対して、なにかマクロを割り当てるとCmderがctrl+z入力を受け取って、dockerへの入力を遮断してくれます。
下記に設定例をサクッと書いておきます(公式サイトに詳しい説明があります)。
- Cmderの設定を開く
- Key & Macro を開く
- デフォルト値が
All hotkeys
になっているプルダウンから、Macrosを選択する - Choose hotkey欄をクリックしてから、キーボードでctrl+zを押さえる
- GUI Macro欄に次の文字列を入力する
MsgBox("dockerコンテナからのexitを防止しました","ctrl+zを遮断")
- 設定を保存する
以上で対策となります。
設定が終わったら正しく設定できているかどうか、ctrl+zを押して確かめてみるといいかもしれません。
参考
https://conemu.github.io/en/SettingsHotkeys.html
https://conemu.github.io/en/GuiMacro.html#MsgBox
あとがき
この対策方法を望ましいものとは感じていません。
ctrl+zをCmderで使えなくなります。
本来このような挙動(ctrl+zでexit)をすることをdocker作っている側も想定していないようです。
これについてのgithubのイシューがありますが、docker on linuxならこうした挙動はないようです。
このイシューは放置されているようですが、困っている人はそこそこ存在するようです。修正が楽しみです。
https://github.com/docker/for-win/issues/7811