Moby: Docker内の奇妙な端末の動作

作成日 2017年06月23日  ·  33コメント  ·  ソース: moby/moby

docker内で/ bin / bash(docker exec -ti container / bin / bash)を実行し、コマンドを再帰的に検索すると、ターミナルが奇妙な動作を開始し、すべてが図のように台無しになることがあります。
その後、コンテナを終了して再度実行する必要があります。
selection_017

最も参考になるコメント

このバグは、dockerexecコマンドでコンテナに提供されないことがある端末の幅と高さのパラメータが原因であることがわかりました。

あなたはこの号でそれについてもっと読むことができます:#10341

私はこの方法でバグを解決しました:

docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash

このコマンドをスクリプトに入れて、コンテナー名をパラメーターとして指定し、docker-execのようなエイリアスを作成することもできます。

全てのコメント33件

Ctrl-P / Ctrl-Nは私の場合は奇妙に振る舞い、シェルの履歴をナビゲートするのは面倒です。 同じ問題に悩まされている可能性があります。

また、アップキーを使用して履歴をナビゲートすると、この動作が再現される場合があることにも気づきました。

Dockerが原因で、最初に適切な端末サイズがわからないという端末の問題が頻繁に発生します。 これは、新しい端末でのみ発生するようです。 (これが問題の原因である場合とそうでない場合があります。)例:

$ docker exec -it foo /bin/bash
foo<strong i="6">@649fb21d747c</strong>:~$ stty size
0 0
foo<strong i="7">@649fb21d747c</strong>:~$ reset -w
foo<strong i="8">@649fb21d747c</strong>:~$ stty size
24 80
foo<strong i="9">@649fb21d747c</strong>:~$ # That was still wrong. Now resize the terminal to get a SIGWINCH.
foo<strong i="10">@649fb21d747c</strong>:~$ stty size
69 208
foo<strong i="11">@649fb21d747c</strong>:~$ exit
exit
$ docker exec -it foo /bin/bash # Try it again.
foo<strong i="12">@649fb21d747c</strong>:~$ stty size
69 208
foo<strong i="13">@649fb21d747c</strong>:~$ # Doesn't happen anymore for this session.

このバグは、dockerexecコマンドでコンテナに提供されないことがある端末の幅と高さのパラメータが原因であることがわかりました。

あなたはこの号でそれについてもっと読むことができます:#10341

私はこの方法でバグを解決しました:

docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash

このコマンドをスクリプトに入れて、コンテナー名をパラメーターとして指定し、docker-execのようなエイリアスを作成することもできます。

ありがとう@cromat! これにより、適切なTTYがないために出力が十分に広くない、Windows上のBashでDocker forWindowsを使用していた問題が解決されました。 バックティックがコードにフォーマットされたように見えるので、ここに再び行があります:

docker exec -t container_name /bin/bash -c "export COLUMNS=`tput cols`; export LINES=`tput lines`; exec bash"

答えを探してここに来る人は、 stackoverflowで見つけることができます

@PhilTに感謝します。

これは私のために働いたものです。

docker exec -it container_name sh -c "stty rows 50 && stty cols 150 && bash"

ありがとう! それは私のものも解決しました!

ダースのソリューションを試した後、 @ PhilTだけが機能しました

これはより正しいアプローチです。 bashのdouble-execは必要ありません。

docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash

@eigoodのソリューションは、最初の試行では魅力のように機能しました...

私はgnomeでubuntuを使用しています。 通常、ウィンドウのサイズを変更すると、問題は自動的に解決されます。
gnomeでのサイズ変更はCtrl+Super+(Down Arrow) 、次にCtrl+Super+(Up Arrow)

@eigood正しい解決策をありがとう。 Dockerがこれを実行しないのはなぜですか?

@PhilT @cromat私の場合、 -tオプションだけでなく、 -itように-iオプションが必要です。

私は自分の生活を楽にするためにエイリアスを作成しました。

alias dexec='docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti $1'

例えば。:

dexec containername_service_1 bash

@ romulo1984どのバージョンの

@thaJeztah 17.12.0-ce

そのバージョンは3月にEOLに到達しました。 18.06(現在の安定リリース)に更新することをお勧めします。これには修正が含まれています

@thaJeztahありがとう。

この問題はDocker18.06で解決されていることを確認できます。

@nodakai私はあなたと同じ問題を抱えています:幅などの問題はありませんが、Dockerの何かが再描画されません。 具体的には、ctrl-pとctrl-nを使用してbash履歴(私の習慣)をスクロールしても、再描画されません。 矢印キーを使用すると、使用できます。

この問題を回避する方法を見つけることができましたか?

@Grazfatherそれは別の問題だと思います。 コンテナからデタッチするためのキーシーケンスがC-p C-qであるという問題があると思います。そのため、dockerはC-pを確認し、デタッチするためにC-qを待機しています。 私は実際に試したことはありませんが、 --detach-keys=すると役立つ可能性があります。

答えを探してここに来る人は、 stackoverflowで見つけることができます

LINESおよびCOLUMNS環境変数を上書きする新しいユーザーの環境が必要であると仮定すると、コンテナー内でユーザーを切り替えると他のソリューションが機能しないため、ここにリンクされている答えが最良のソリューションimoです。

dockerでxshellexecを使用します。

image

xshellウィンドウのサイズを変更すると..。
image

exec tty size reset right ...誰もがこれをなぜ知っているのか、そしてxshellがそれをどのように行うのか...私はより低いdockerバージョンで働いた

image

Docker-この問題を解決するための例を作成します。

version: '3'
services:
    php:
        container_name: cmg-php
        hostname: "docker-stand"
        build:
            context: ./
        environment:
            - COLUMNS=`tput cols`
            - LINES=`tput lines`

環境に焦点を当てます。 @cromatありがとう!

@fropsソリューションが無効です。 environmentキーは、コンテナーの作成ステップで環境を初期化するために使用されるため、正しい解決策ではありません。 作成ではなく、コンテナの入力時にenv値を設定する必要があります。

その上、 @ thaJeztahを読んだ

18.06以降では間違いなく改善されるはずですが、サイズ変更を再トリガーする必要がある場合もあります(ターミナルウィンドウのサイズを変更することで再トリガーできます)。 これらの場合に再試行ループを追加するプルリクエストがありますが、まだマージされていません。 https://github.com/docker/cli/pull/1529

状況によっては、 COLUMNSLINESを回避策として設定することを検討しますが、環境に維持するものではありません。

私は実行している場合にはバグがまだ存在してい--ttyとせずに--interactive
Dockerバージョン18.09.2、ビルド6247962

再現例:

FROM debian
RUN apt-get update
RUN apt-get install -y sl
CMD /usr/games/sl

出力が壊れている/端末サイズが間違っているコマンド:
docker run --rm --tty slimage

https://github.com/docker/cli/pull/1529はまだ `Docker18.09にありません

19.03.0(2019年7月10日)に修正される予定です

https://github.com/docker/cli/pull/1775を介してDockerCLI18.09.5にバックポートされました

コマンドを使用してopenwrtをコンパイルすると、最新のMacOSに引き続き表示されます。
menuconfigを作成します
上記のすべての回避策は、混乱したncursesウィンドウでは機能しません

docker version

    Client: Docker Engine - Community
     Version:           19.03.1
     API version:       1.40
     Go version:        go1.12.5
     Git commit:        74b1e89
     Built:             Thu Jul 25 21:18:17 2019
     OS/Arch:           darwin/amd64
     Experimental:      false

    Server: Docker Engine - Community
     Engine:
      Version:          19.03.1
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.5
      Git commit:       74b1e89
      Built:            Thu Jul 25 21:17:52 2019
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          v1.2.6
      GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
     runc:
      Version:          1.0.0-rc8
      GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683
docker version

    Client: Docker Engine - Community
     Version:           19.03.1
     API version:       1.40
     Go version:        go1.12.5
     Git commit:        74b1e89
     Built:             Thu Jul 25 21:18:17 2019
     OS/Arch:           darwin/amd64
     Experimental:      false

    Server: Docker Engine - Community
     Engine:
      Version:          19.03.1
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.5
      Git commit:       74b1e89
      Built:            Thu Jul 25 21:17:52 2019
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          v1.2.6
      GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
     runc:
      Version:          1.0.0-rc8
      GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683

私は、スタイルとリンティング/修正のためのすべての豪華なプラグインを使用して、ポータブルVIM構成を作成しました。 @cromatソリューションを

$ vi ~/.zshrc
function vim {
    docker run --env LINES=$(tput lines) --env COLUMNS=$(tput cols) # ... 
}
このページは役に立ちましたか?
0 / 5 - 0 評価