我无法连接到在群组上运行的容器。似乎以下不起作用:
>$ 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
或
self
并查看以下错误
来自守护程序的错误响应:没有这样的容器:2jk3s2xs7ce62piunbkiptypz
来自守护程序的错误响应:没有这样的容器:login.1
答案 0 :(得分:11)
使用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:/#
答案 1 :(得分:0)
一个比较老的问题,但这里只有我的两分钱:我经常跑:
docker exec -it $(docker ps -q -f name="login*") sh
-q
仅返回容器ID
-f name="login*"
使用正则表达式基于容器名称应用过滤器
这很方便,因为启动新容器将更改容器名称,其中包含一些随机字符。过滤器仅返回1个容器,这一点很重要,因此请以仅会有1个结果的方式指定名称。例如:如果您有一个容器“ monster”和一个容器“ monitor”,则需要-f name="moni*"
来排除“ monster”容器。
该命令将导致如下内容:
docker exec -it login.1.cg7fltcu3wfe7ixtnqzg8myy1 sh