壳进入群集容器

And*_*Jay 9 docker docker-swarm

我无法连接到在群上运行的容器.似乎以下不起作用:

docker exec -it <container_ID> bash
Run Code Online (Sandbox Code Playgroud)

这是一些输出:

>$ 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
Run Code Online (Sandbox Code Playgroud)

然后我会跑:

$ docker exec -it 2jk3s2xs7ce62piunbkiptypz bash
Run Code Online (Sandbox Code Playgroud)

要么

$ docker exec -it login.1 bash
Run Code Online (Sandbox Code Playgroud)

并看到以下错误

来自守护程序的错误响应:没有这样的容器:2jk3s2xs7ce62piunbkiptypz

来自守护程序的错误响应:没有这样的容器:login.1

Sam*_*ers 12

使用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:/#
Run Code Online (Sandbox Code Playgroud)

长名称是形式 $SERVICE_NAME.$REPLICA_NUMBER.$ID_FROM_SERVICE_PS

>$ docker exec -it login.1.cg7fltcu3wfe7ixtnqzg8myy1 bash
root@e53bff8bebfc:/#
Run Code Online (Sandbox Code Playgroud)


Ken*_*nny 6

相当老的问题,但这里只有我的两分钱:我经常运行:

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