1. ホーム
  2. docker

[解決済み] docker attach と docker exec の違い

2023-01-19 19:15:32

質問

どちらもコンテナ内でコマンドを実行することができます。 どちらもコンテナをデタッチすることができます。

では、docker execとdocker attachの本当の違いは何なのでしょうか?

どのように解決するのか?

あるところに コミットPR で、doc に追加されました。

注意 このコマンド( attach ) は、コンテナ内で新しいプロセスを実行するためのものではありません。 参照してください。 docker exec .

"の答えです。 Dockerです。実行済みコンテナ内でbashsshを取得する方法 ( run -d )? はその違いを示しています。

(docker >= 1.3) もし私たちが docker attach , のインスタンスを1つだけ使用することができます。 .

ですから、もしコンテナのシェルの新しいインスタンスで新しいターミナルを開きたいなら、単に docker exec

ドッカーコンテナを起動する際に /bin/bash コマンドで起動されていれば、attach でアクセスできますが、そうでなければ を実行します。 コマンドを使用してコンテナ内に bash インスタンスを作成します。 exec .

で述べたように この問題 :

  • Attachはコンテナ内で余計なものを実行するためではなく、実行中のプロセスにアタッチするためのものです。
  • " docker exec は、シェルやその他のプロセスなど、すでに開始されているコンテナで新しいものを実行するために特に使用されます。

同じ問題が追加されます。

一方 attach はうまく命名されていませんが、特にLXCコマンドのために lxc-attach (これはより似ている docker exec <container> /bin/sh に似ていますが、LXCに特有のものです)、Dockerが開始したプロセスに文字通りあなたを添付するという特定の目的があります。

プロセスが何であるかに応じて、動作は異なるかもしれません。 にアタッチされます。 /bin/bash にアタッチするとシェルが表示されますが、redis-serverにアタッチすると、デーモン化せずに直接redisを起動したようになります。