LoginSignup
7
12

More than 5 years have passed since last update.

docker execでコンテナ内に入ると端末の挙動がいまいちな件

Last updated at Posted at 2017-09-08

まずはdockerコンテナ内に入る

お馴染みの方法でごく単純に

docker exec -it $container_name bash --login

または

docker exec -it $container_name bash -l

入れるのは入れるけど

  • dumb端末(画面なし扱い)になってしまうため、描画周りに難あり
  • ttyがないのでscreenも使えない(起動できない)

対策

コンテナの/root/.bash_profileに以下を追記する

/root/.bash_profile
if [ x$TERM = xdumb ]; then
    export TERM=xterm-256color
    exec >/dev/tty 2>/dev/tty </dev/tty
    cd $HOME
fi
  • TERMを上書きしてxterm-256color(ただのxtermでも可、お好みで)にすると描画周りが改善される
  • ttyを無理やり繋いでいるのでscreenを使えるようになる

/root/.bash_profileを書き換えるためだけにイメージをビルドし直したりしたくない

  • dockerホスト側の適当なパスに上記の追記をした.bash_profileを置いておく

    • 仮に /home/your_name/container_bash_profile とする
  • docker-compose.ymlに以下を追記する

    • read onlyでコンテナの/root/.bash_profileにdockerホスト側のファイルを重ねてしまう
    • docker-compose使ってない場合はdocker run -vで頑張ってください
docker-compose.yml
    volumes:
      - /home/your_name/container_bash_profile:/root/.bash_profile:ro
  • コンテナを立ち上げ直す
docker-compose up -d

既知の問題

  • tty無理やり繋いでscreenを使えるようにはなっているけど、detachしたセッションにattachできない
    • うっかりdetachするとそのセッションにはどうやっても復帰できないので注意
    • 解決策を知っている方は教えてください
7
12
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
7
12