Shell 进入 swarm 容器
Shell into swarm container
我无法连接到 运行集群上的容器。似乎以下内容不起作用:
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
并看到以下错误
Error response from daemon: No such container: 2jk3s2xs7ce62piunbkiptypz
Error response from daemon: No such container: 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:/#
相当老的问题,但这里只是我的两分钱:我经常 运行:
docker exec -it $(docker ps -q -f name="login*") sh
-q
仅 returns 容器 id
-f name="login*"
根据容器名称应用过滤器,使用正则表达式
这会派上用场,因为启动一个新容器会更改容器名称,其中包含一些随机字符。重要的是您的过滤器 returns 只有 1 个容器,因此请以只有 1 个结果的方式指定名称。例如:如果你有一个容器"monster"和一个容器"monitor",你需要-f name="moni*"
来排除"monster"容器。
该命令将产生如下结果:
docker exec -it login.1.cg7fltcu3wfe7ixtnqzg8myy1 sh
我无法连接到 运行集群上的容器。似乎以下内容不起作用:
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
并看到以下错误
Error response from daemon: No such container: 2jk3s2xs7ce62piunbkiptypz
Error response from daemon: No such container: 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:/#
相当老的问题,但这里只是我的两分钱:我经常 运行:
docker exec -it $(docker ps -q -f name="login*") sh
-q
仅 returns 容器 id
-f name="login*"
根据容器名称应用过滤器,使用正则表达式
这会派上用场,因为启动一个新容器会更改容器名称,其中包含一些随机字符。重要的是您的过滤器 returns 只有 1 个容器,因此请以只有 1 个结果的方式指定名称。例如:如果你有一个容器"monster"和一个容器"monitor",你需要-f name="moni*"
来排除"monster"容器。
该命令将产生如下结果:docker exec -it login.1.cg7fltcu3wfe7ixtnqzg8myy1 sh