Keeping track of status different components issues which we have seen with Linux + Windows hybrid Docker Swarm.
NOTE! I recommended to use Semi-Annual Channel version of Windows Server as it contains many improvements which are missing from Windows Server 2016.
I also recommended you to avoid Hyper-V isolation mode as it have very poor performance.
Install GitHub Issue Link Status to your favorite browser so you can see status of these items directly on here:
| Role | OS | OS version | Docker version |
|---|---|---|---|
| Swarm manager | Rancher OS | v1.4.0 | 18.03.1-ce |
| Linux worker | Rancher OS | v1.4.0 | 18.03.1-ce |
| Windows worker | Windows Server | version 1803 | 18.03.1-ee-1 |
This docker stack is tested to be fully working on Linux + Windows hybrid swarm and connections between all the containers are working just fine.
NOTE! All the services are using endpoint_mode=dnsrr that is trick to make connections working.
version: '3.3'
networks:
test:
driver: overlay
services:
win1:
image: microsoft/nanoserver:1803_KB4103721
networks:
- test
deploy:
endpoint_mode: dnsrr
placement:
constraints:
- node.platform.os==windows
command: ping -t 127.0.0.1
win2:
image: microsoft/nanoserver:1803_KB4103721
networks:
- test
deploy:
endpoint_mode: dnsrr
placement:
constraints:
- node.platform.os==windows
command: ping -t 127.0.0.1
linux1:
image: alpine:3.7
networks:
- test
deploy:
endpoint_mode: dnsrr
placement:
constraints:
- node.platform.os==linux
command: sh -c "ping 127.0.0.1"
linux2:
image: alpine:3.7
networks:
- test
deploy:
endpoint_mode: dnsrr
placement:
constraints:
- node.platform.os==linux
command: sh -c "ping 127.0.0.1"
| OS | Description | Upstream item | Workaround / solution |
|---|---|---|---|
| Linux | docker service logs command stopped working | moby/moby#35011 | Restart all Swarm managers one by one |
| Both | Node reboot makes multiple copies of service running on same node | moby/moby#26259 | Create service(s) on --mode global and use constraints to control which nodes containers will run |
| Windows | Cannot change default NAT IP on Windows node | docker/for-win#726 | Update dockerd.exe start command to contain --fixed-cidr before start it first time on new server |
| Windows | hcsshim::PrepareLayer timeouts on docker build phase | moby/moby#27588 | Use Core version of Windows Server |
| Windows | Cannot start container because directory mount fails | moby/moby#30556 | Make sure that folder is empty on docker image / Use Windows Server build 1803 or above |
| Windows | Networks stops working / containers fails to start | Multiple | Clear networks with this script and join node back to Swarm |
| Windows | Connections from Windows node to service(s) on Linux or another Windows node fails | docker/for-win#1476 | Use DNS routing mode ( --endpoint-mode dnsrr ) for all services (both Linux and Windows) where you want connect from Windows |
| Windows | Cannot connect to docker from inside of container (needed example with microsoft/vsts-agent) | moby/moby#34795 | - |
| Windows | Date / time is wrong inside of container with Hyper-V isolation mode | moby/moby#37283 | Use process isolation mode |
| Windows | Printer spooler crashes inside of container | stackoverflow | https://stackoverflow.com/a/50748146/9529640 |
| Windows | Cannot install all features to container because of they are removed from image | - | Copy needed packages from host machine C:\Windows\WinSxs and install using dism |
| Windows | net use command fails inside of container | - | Install File-Services feature to host and to container |
| OS | Description | Upstream item |
|---|---|---|
| Both | Cannot stop containers | moby/moby#35933 |
| Windows | Container cannot be started because old endpoint is stuck | moby/moby#36603 |
| Both | {{.Node.Hostname}} cannot be used on environment variables | docker/swarmkit# |