Docker is so cool; and supporting Windows and Linux alike is even cooler. High availability is a thing though, so I was delighted to find out I can create a swarm in Linux; join Windows Server 2016, and have it managed. Awesome! But…

Easy enough to do too:

Linux side: (manager node)

$ sudo docker swarm init --advertise-addr 192.168.1.229
Swarm initialized: current node (3i4tob1jc5xlpo09oak97u42n) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-2ya724dqobyyay67qo2rb9h76xzcof8d54ev5hqpfyzfnam5k4-7kk0e96myxm3ermztepjb6ijb \
    192.168.1.229:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Windows side: (worker node)

PS C:\> docker swarm join --token SWMTKN-1-2ya724dqobyyay67qo2rb9h76xzcof8d54ev5hqpfyzfnam5k4-7kk0e96myxm3ermztepjb6ijb 192.168.1.229:2377
This node joined a swarm as a worker.

Super cool! Now lets deploy a service in swarm mode!

Manager:

~$ sudo docker service create --name test microsoft/iis
aurckil3iacf57f0smoofn4io

And then; we have on the worker node (windows side)

PS C:\> docker ps
CONTAINER ID        IMAGE                  COMMAND                   CREATED             STATUS                  PORTS 
              NAMES
45b102072d5e        microsoft/iis:latest   "C:\\ServiceMonitor..."   7 seconds ago       Up Less than a second         
              test.1.6wtl63hq2trf1vhetcnhku2xm

 
Great. But then it gets kinda bad.

Because if we try to publish a port; it fails. It doesnt fail gracefully, it doesnt provide feedback, it just does nothing Let’s fire up a service, and expose port 80 in the swarm

~$ sudo docker service create --name noBueno --publish 80 microsoft/iis
0r3sgr8k6ioi9480fjxmb8y9u

So far so good. Let’s check out the Windows host:

PS C:\> docker ps -a
CONTAINER ID        IMAGE                  COMMAND                   CREATED             STATUS              PORTS     
          NAMES
45b102072d5e        microsoft/iis:latest   "C:\\ServiceMonitor..."   3 minutes ago       Up 3 minutes                  
          test.1.6wtl63hq2trf1vhetcnhku2xm

Huh; weird. No new containers running. Let’s look at the management node’s service status:

~$ sudo docker service ls
ID            NAME     REPLICAS  IMAGE          COMMAND
0r3sgr8k6ioi  noBueno  0/1       microsoft/iis  
aurckil3iacf  test     1/1       microsoft/iis

No replicas. Never even shows up on the Windows server. And to add to this, to prove it’s a bug, let’s publish a port retroactively on the already running container:

~$ sudo docker service update --publish-add 80 test

And hop over to our Windows host…

PS C:\> docker ps -a
CONTAINER ID        IMAGE                  COMMAND                   CREATED             STATUS                        
 PORTS               NAMES
45b102072d5e        microsoft/iis:latest   "C:\\ServiceMonitor..."   6 minutes ago       Exited (1067) 35 seconds ago  
                     test.1.6wtl63hq2trf1vhetcnhku2xm

Nooooooooooooo!

Bug report has been submitted: https://github.com/docker/docker/issues/27612   Let’s hope this gets some action in the near(ish) future, because as far as I can tell - a Windows node cannot be the docker swarm manager, and multi-platform swarms certainly arent prime-time yet.