群れで実行されているコンテナに接続できません。次のようには機能しないようです。
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
使用する docker ps
使用できる名前を検索します。両方の下を見てくださいCONTAINER ID
とNAMES
、どちらも機能します。
>$ 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:/#
かなり古い質問ですが、ここでは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