壳进入群集容器

时间:2016-10-10 21:03:52

标签: docker docker-swarm

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

>$ 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

2 个答案:

答案 0 :(得分:11)

使用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:/#

答案 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