Search code examples
restdockerswarmremoteapi

Docker Remote API not accurate listing running containers in swarm


Currently I am facing the following problem:

I set up 3 virtual box machines with a debian and installed docker. No firewall in place. I created a swarm making one machine the manager and joined the other two as workers as described in countless web pages. Works perfect. On the swarm manager I activated a remote API access via -H :4243... and restarted the deamon. (only on the swarm manager) 'docker node ls' qualifies all nodes being active. When I call http://:4243/nodes I see all nodes. I created an overlay network (most likely not needed to illustrate my problem. Standard Ingress Networking should be ok too) Then I created a service with 3 replica. specifying a name, my overlay network and some env params. 'docker service ps ' gives me the info that each node runs one container with my image. Doublechecking with 'docker ps' on each node says the same.

My problem is: Calling 'http://:4243/containers/json' I only see one container, the one on the swarm manager.

I expect to see 3 containers, one for each node. The question is why ?

Any ideas ?

This Question does not seem to be my problem


Solution

  • Listing containers via /containers/json only shows "local" containers on that node. If you want a complete overview of every container on every node, you'll need to use the swarm aware endpoints. Docker Services are the high level abstraction, while Tasks are the container level abstraction. See https://docs.docker.com/engine/api/v1.30/#tag/Task for reference.

    If you perform a request on your manager node at http://:4243/tasks you should see every task (aka container), on which node they are running, and to which service they belong to.