Shell into swarm container

Use docker ps to find the names you can use. Look under both CONTAINER ID and NAMES, either will work.

>$ 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:/#

The long name is of the form $SERVICE_NAME.$REPLICA_NUMBER.$ID_FROM_SERVICE_PS

>$ docker exec -it login.1.cg7fltcu3wfe7ixtnqzg8myy1 bash
root@e53bff8bebfc:/#

Quite an older question, but just my two cents here: I very often run:

docker exec -it $(docker ps -q -f name="login*") sh

-q only returns the container id

-f name="login*" applies a filter based on container name, using a regex

This comes in handy because starting a new container will change the container name with some random characters in it. It's important that your filter returns just 1 container, so specify the name in a way that there will be just 1 result. For example: if you have a container "monster" and a container "monitor", you need -f name="moni*" to exclude the "monster" container.

The command will result in something like:

docker exec -it login.1.cg7fltcu3wfe7ixtnqzg8myy1 sh