web-dev-qa-db-ja.com

群れのコンテナにシェル

群れで実行されているコンテナに接続できません。次のようには機能しないようです。

docker exec -it <container_ID> bash

ここにいくつかの出力があります:

>$ docker service ls
ID            NAME          REPLICAS  IMAGE                              COMMAND
4rliefwe74o5  login         1/1       login-arm64:1.0


>$ docker service ps login
ID                         NAME     IMAGE                       NODE               DESIRED STATE  CURRENT STATE          ERROR
2jk3s2xs7ce62piunbkiptypz  login.1  login-arm64:1.0  odroid64-cluster4  Running        Running 5 minutes ago

次に、実行します。

$ docker exec -it 2jk3s2xs7ce62piunbkiptypz bash

または

$ docker exec -it login.1 bash

次のエラーが表示されます

デーモンからのエラー応答:そのようなコンテナーはありません:2jk3s2xs7ce62piunbkiptypz

デーモンからのエラー応答:そのようなコンテナはありません:login.1

12
Andi Jay

使用する docker ps使用できる名前を検索します。両方の下を見てくださいCONTAINER IDNAMES、どちらも機能します。

>$ docker ps
CONTAINER ID        IMAGE             COMMAND                  CREATED             STATUS              PORTS               NAMES
e53bff8bebfc        login-arm64:1.0   "/bin/sh -c 'node ser"   27 seconds ago      Up 25 seconds                           login.1.cg7fltcu3wfe7ixtnqzg8myy1

>$ docker exec -it e53bff8bebfc bash
root@e53bff8bebfc:/#

長い名前の形式は$SERVICE_NAME.$REPLICA_NUMBER.$ID_FROM_SERVICE_PS

>$ docker exec -it login.1.cg7fltcu3wfe7ixtnqzg8myy1 bash
root@e53bff8bebfc:/#
12
Sam Myers

かなり古い質問ですが、ここでは2セントだけです。私は頻繁に実行します。

docker exec -it $(docker ps -q -f name="login*") sh

-qはコンテナIDのみを返します

-f name="login*"は、正規表現を使用して、コンテナー名に基づいてフィルターを適用します

これは、新しいコンテナを開始すると、ランダムな文字が含まれるコンテナ名が変更されるため便利です。フィルタが返すコンテナは1つだけであることが重要なので、結果が1つだけになるように名前を指定します。例:コンテナ「モンスター」とコンテナ「モニター」がある場合、「モンスター」コンテナを除外するには-f name="moni*"が必要です。

コマンドは次のようになります。

docker exec -it login.1.cg7fltcu3wfe7ixtnqzg8myy1 sh

3
Kenny