{"id":14064610,"url":"https://github.com/olljanat/docker-issue-tracking","last_synced_at":"2026-04-10T09:11:40.965Z","repository":{"id":102409749,"uuid":"131561027","full_name":"olljanat/docker-issue-tracking","owner":"olljanat","description":"Keeping track of status different components issues which we have seen with Linux + Windows hybrid Docker Swarm.","archived":false,"fork":false,"pushed_at":"2020-09-28T18:21:14.000Z","size":54,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-08-13T07:07:13.575Z","etag":null,"topics":["docker","docker-swarm","issue-tracker","windows-containers"],"latest_commit_sha":null,"homepage":null,"language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/olljanat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-04-30T05:57:52.000Z","updated_at":"2022-11-08T17:45:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"58d82942-a0eb-4fb2-8c01-edc6f25aa467","html_url":"https://github.com/olljanat/docker-issue-tracking","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olljanat%2Fdocker-issue-tracking","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olljanat%2Fdocker-issue-tracking/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olljanat%2Fdocker-issue-tracking/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olljanat%2Fdocker-issue-tracking/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/olljanat","download_url":"https://codeload.github.com/olljanat/docker-issue-tracking/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228040749,"owners_count":17860211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-swarm","issue-tracker","windows-containers"],"created_at":"2024-08-13T07:03:57.634Z","updated_at":"2026-04-10T09:11:40.855Z","avatar_url":"https://github.com/olljanat.png","language":"PowerShell","funding_links":[],"categories":["PowerShell"],"sub_categories":[],"readme":"# docker-issue-tracking\r\nKeeping track of status different components issues which we have seen with Linux + Windows hybrid Docker Swarm.\r\n\r\n**NOTE!** I recommended to use Windows Server 2019 as it contains many improvements which are missing from Windows Server 2016.\r\n\r\nI also recommended you to avoid Hyper-V isolation mode as it have very poor performance.\r\n\r\nYou might also be interested about [my custom pached version of Docker for Windows Server](https://github.com/olljanat/moby/releases/tag/19.03.5-olljanat2) which contains fixes which are not yet released as part of official version.\r\n\r\n\r\n# Example of fully working stacks\r\n\r\nThese [docker stack](https://docs.docker.com/engine/reference/commandline/stack_deploy/) are tested to be fully working on Linux + Windows hybrid swarm and connections between all the containers are working just fine.\r\n\r\n## Traefik\r\nAs a edge router/reverse proxy this example uses [Traefik](https://doc.traefik.io/traefik/) which runs on swarm manager roles and automatically generates rules based on Docker service labels.\r\n```yaml\r\nversion: '3.8'\r\n\r\nservices:\r\n  traefik:\r\n    image: \"traefik:v2.3.0\"\r\n    command:\r\n      - \"--api.dashboard=true\"\r\n      - \"--api.insecure=true\"\r\n      - \"--providers.docker=true\"\r\n      - \"--providers.docker.swarmMode=true\"\r\n      - \"--providers.docker.exposedbydefault=false\"\r\n      - \"--providers.docker.network=traefik-internal\"\r\n      - \"--entrypoints.web.address=:80\"\r\n      - \"--entrypoints.web.forwardedHeaders.insecure\"\r\n      - \"--accesslog=true\"\r\n      - \"--ping\"\r\n    volumes:\r\n      - \"/var/run/docker.sock:/var/run/docker.sock:ro\"\r\n    networks:\r\n      - traefik-public\r\n      - traefik-internal\r\n    ports:\r\n     - target: 80\r\n       published: 80\r\n       protocol: tcp\r\n       mode: host\r\n     - target: 8080\r\n       published: 8080\r\n       protocol: tcp\r\n       mode: host\r\n    deploy:\r\n      mode: replicated\r\n      replicas: 2\r\n      placement:\r\n        max_replicas_per_node: 1\r\n        constraints:\r\n          - node.role == manager\r\n          - node.platform.os == linux\r\n      update_config:\r\n        parallelism: 1\r\n        delay: 10s\r\n      restart_policy:\r\n        condition: on-failure\r\nnetworks:\r\n  traefik-public:\r\n    driver: bridge\r\n    name: bridge\r\n    external: true\r\n  traefik-internal:\r\n    driver: overlay\r\n    name: traefik-internal\r\n    internal: true\r\n```\r\n\r\nAfter you deploy Traefik you can find its dashboard from `http://\u003cmanager node IP\u003e:8080/dashboard/`\r\n\r\n\r\n## Whoami\r\nThis example will deploy [whoami](https://github.com/StefanScherer/whoami) service to each node which helps you with testing/troubleshooting.\r\nThat is always good way to start when you deploy new environment.\r\n\r\nNote that we do not publish any ports from these services but instead of just connect them to **traefik-internal** network.\r\nAs additionally this example sets `endpoint_mode: dnsrr` for each service to make sure that connectivity inside of overlay networks between Linux and Windows containers is working correctly. \r\n\r\n```yaml\r\nversion: '3.7'\r\n\r\nnetworks:\r\n  test:\r\n    driver: overlay\r\n\r\nservices:\r\n  win1:\r\n    image: stefanscherer/whoami\r\n    networks:\r\n      - bar\r\n      - traefik-internal\r\n    deploy:\r\n      endpoint_mode: dnsrr\r\n      placement:\r\n        constraints:\r\n          - node.platform.os==windows\r\n      labels:\r\n        - \"traefik.enable=true\"\r\n        - \"traefik.http.routers.win1.rule=PathPrefix(`/win1`)\"\r\n        - \"traefik.http.services.win1.loadbalancer.server.port=8080\"\r\n\r\n  linux1:\r\n    image: stefanscherer/whoami\r\n    networks:\r\n      - bar\r\n      - traefik-internal\r\n    deploy:\r\n      endpoint_mode: dnsrr\r\n      placement:\r\n        constraints:\r\n          - node.platform.os==linux\r\n      labels:\r\n        - \"traefik.enable=true\"\r\n        - \"traefik.http.routers.linux1.rule=PathPrefix(`/linux1`)\"\r\n        - \"traefik.http.services.linux1.loadbalancer.server.port=8080\"\r\n\r\n  win2:\r\n    image: stefanscherer/whoami\r\n    networks:\r\n      - foo\r\n      - traefik-internal\r\n    deploy:\r\n      endpoint_mode: dnsrr\r\n      placement:\r\n        constraints:\r\n          - node.platform.os==windows\r\n      labels:\r\n        - \"traefik.enable=true\"\r\n        - \"traefik.http.routers.win2.rule=PathPrefix(`/win2`)\"\r\n        - \"traefik.http.services.win2.loadbalancer.server.port=8080\"\r\n\r\n  linux2:\r\n    image: stefanscherer/whoami\r\n    networks:\r\n      - foo\r\n      - traefik-internal\r\n    deploy:\r\n      endpoint_mode: dnsrr\r\n      placement:\r\n        constraints:\r\n          - node.platform.os==linux\r\n      labels:\r\n        - \"traefik.enable=true\"\r\n        - \"traefik.http.routers.linux2.rule=PathPrefix(`/linux2`)\"\r\n        - \"traefik.http.services.linux2.loadbalancer.server.port=8080\"\r\n\r\nnetworks:\r\n    bar:\r\n        driver: overlay\r\n        name: bar\r\n    foo:\r\n        driver: overlay\r\n        name: foo\r\n    traefik-internal:\r\n      external: true\r\n\r\n```\r\n\r\nAfter you are deployed this stack you can connect to each of your service using these URLs:\r\n* `http://\u003cmanager node IP\u003e/win1/`\r\n* `http://\u003cmanager node IP\u003e/linux1/`\r\n* `http://\u003cmanager node IP\u003e/win2/`\r\n* `http://\u003cmanager node IP\u003e/linux2/`\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folljanat%2Fdocker-issue-tracking","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Folljanat%2Fdocker-issue-tracking","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folljanat%2Fdocker-issue-tracking/lists"}