I'm unable to connect to a container that's running on a swarm. Seems like the following doesn't work:
docker exec -it <container_ID> bash
Here is some output:
>$ 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
Then I'll run:
$ docker exec -it 2jk3s2xs7ce62piunbkiptypz bash
or
$ docker exec -it login.1 bash
and see the following errors
Error response from daemon: No such container: 2jk3s2xs7ce62piunbkiptypz
Error response from daemon: No such container: login.1
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With