まずは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するとそのセッションにはどうやっても復帰できないので注意
- 解決策を知っている方は教えてください