I have an app, consisting of a client and a server part. The client part should be available both for Windows and Linux. The app relies heavily on network management, so in order to test it I use a docker-compose
project (simulating a network, router, etc.). The setup runs well and consistantly on Linux. For Windows, however, it’s more difficult.
I would like to test my app on GitHub actions, so there are several limitations:
- No nested virtualization is available.
- No Docker Desktop is installed.
- All setup is volatile, should be quickly created once action starts and will be destroyed once action exits.
Again, it works well Linux runner. But it doesn’t work on Windows. What I am trying to do is: set up WSL2 (with a special action), install Docker there (I use the convenience script), run docker-compose
inside and make the created bridge networks available to the Windows host.
What works?
WSL2
is installed, Docker is also installed successfully.- Packet forwarding and
iptables
setup works, packets reach Linux host.
What doesn’t work?
For some reason, Docker bridge networks seem to not work. All of them are shown to be DOWN
(including docker0
) and also all the routes to the containers are marked as linkdown
. So the packets are lost…
Here are the additional details and logs that I can provide:
Docker installation logs (from installation and running):
systemd[1]: Starting docker.service - Docker Application Container Engine...
dockerd[2102]: time="2025-06-07T17:51:16.775514981Z" level=info msg="Starting up"
dockerd[2102]: time="2025-06-07T17:51:16.777337118Z" level=info msg="OTEL tracing is not configured, using no-op tracer provider"
dockerd[2102]: time="2025-06-07T17:51:16.796932015Z" level=info msg="Creating a containerd client" address=/run/containerd/containerd.sock timeout=1m0s
dockerd[2102]: time="2025-06-07T17:51:17.537672483Z" level=info msg="Loading containers: start."
dockerd[2102]: time="2025-06-07T17:51:17.899955631Z" level=info msg="Loading containers: done."
dockerd[2102]: time="2025-06-07T17:51:17.951182726Z" level=info msg="Docker daemon" commit=45873be containerd-snapshotter=false storage-driver=overlay2 version=28.2.2
dockerd[2102]: time="2025-06-07T17:51:17.951825901Z" level=info msg="Initializing buildkit"
dockerd[2102]: time="2025-06-07T17:51:17.982806143Z" level=warning msg="CDI setup error /var/run/cdi: failed to monitor for changes: no such file or directory"
dockerd[2102]: time="2025-06-07T17:51:17.982876573Z" level=warning msg="CDI setup error /etc/cdi: failed to monitor for changes: no such file or directory"
dockerd[2102]: time="2025-06-07T17:51:18.049173994Z" level=info msg="Completed buildkit initialization"
dockerd[2102]: time="2025-06-07T17:51:18.058604301Z" level=info msg="Daemon has completed initialization"
dockerd[2102]: time="2025-06-07T17:51:18.058895122Z" level=info msg="API listen on /run/docker.sock"
systemd[1]: Started docker.service - Docker Application Container Engine.
dockerd[2102]: time="2025-06-07T17:52:29.501102962Z" level=error msg="Error handling plugin refcount operation" driver= error="legacy plugin: Unable to find plugin without name" mode=1
dockerd[2102]: time="2025-06-07T17:52:29.582633921Z" level=error msg="Error handling plugin refcount operation" driver= error="legacy plugin: Unable to find plugin without name" mode=1
dockerd[2102]: time="2025-06-07T17:52:29.657875049Z" level=error msg="Error handling plugin refcount operation" driver= error="legacy plugin: Unable to find plugin without name" mode=1
dockerd[2102]: time="2025-06-07T17:52:29.737173649Z" level=error msg="Error handling plugin refcount operation" driver= error="legacy plugin: Unable to find plugin without name" mode=1
systemd[1]: Starting docker.service - Docker Application Container Engine...
dockerd[288]: time="2025-06-07T17:54:07.209942988Z" level=info msg="Starting up"
dockerd[288]: time="2025-06-07T17:54:07.215074998Z" level=info msg="OTEL tracing is not configured, using no-op tracer provider"
dockerd[288]: time="2025-06-07T17:54:07.287951420Z" level=info msg="Creating a containerd client" address=/run/containerd/containerd.sock timeout=1m0s
dockerd[288]: time="2025-06-07T17:54:07.375441985Z" level=info msg="[graphdriver] using prior storage driver: overlay2"
dockerd[288]: time="2025-06-07T17:54:07.426622288Z" level=info msg="Loading containers: start."
dockerd[288]: time="2025-06-07T17:54:08.735548126Z" level=info msg="Removing stale sandbox" cid=3c911613e727 isRestore=false sid=228c539d3bf0
dockerd[288]: time="2025-06-07T17:54:08.767770263Z" level=warning msg="Failed deleting service host entries to the running container: open : no such file or directory"
dockerd[288]: time="2025-06-07T17:54:08.787657751Z" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object [endpoint 77928de546bbc78597a1cf3e7bec0af41138742828716b54d13ce451626f6129 7c2ab277c4488893029eee34430ef57d3ced6a723237075f7bf534cca861c9b3], retrying...."
dockerd[288]: time="2025-06-07T17:54:08.866873339Z" level=warning msg="Failed deleting service host entries to the running container: open : no such file or directory"
dockerd[288]: time="2025-06-07T17:54:08.866939851Z" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object [endpoint 9effa49890aa330215fd130f74346222e4c22238a41f6ddd03a99643081a22c9 49e268363d92daaee3336ced9e2613674fe8ef7efff86229406689a0c5992324], retrying...."
dockerd[288]: time="2025-06-07T17:54:08.906287446Z" level=info msg="Removing stale sandbox" cid=71b77ffcd57b isRestore=false sid=5b667a372ea3
dockerd[288]: time="2025-06-07T17:54:08.930843222Z" level=warning msg="Failed deleting service host entries to the running container: open : no such file or directory"
dockerd[288]: time="2025-06-07T17:54:08.950955553Z" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object [endpoint a6acaab6d2da3b9af3ae1a0d4b8e562796734b0925ea23dbad4ac190784121b2 b4876e4d0a237c79289dd1ffbfac6f1fd3e92936d5ff81d5433d44ab5a78d36a], retrying...."
dockerd[288]: time="2025-06-07T17:54:09.011415091Z" level=warning msg="Failed deleting service host entries to the running container: open : no such file or directory"
dockerd[288]: time="2025-06-07T17:54:09.011497505Z" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object [endpoint a00779de47089bd75002dc92ebed6ab09431adba5f6df43bcfc01809511b6769 a7c91b33c3046b5c945fecd0cadaf89ac51f6e8f5629609deb5185149564796d], retrying...."
dockerd[288]: time="2025-06-07T17:54:09.053465001Z" level=info msg="Removing stale sandbox" cid=3d120550b0a1 isRestore=false sid=5baee3d67385
dockerd[288]: time="2025-06-07T17:54:09.077133259Z" level=warning msg="Failed deleting service host entries to the running container: open : no such file or directory"
dockerd[288]: time="2025-06-07T17:54:09.077226575Z" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object [endpoint a00779de47089bd75002dc92ebed6ab09431adba5f6df43bcfc01809511b6769 de4530a77748305a3d5f5d614134d59bf4b1b967b22eebe2bed062844fb7aec6], retrying...."
dockerd[288]: time="2025-06-07T17:54:09.113281458Z" level=info msg="Removing stale sandbox" cid=edec7fe3ce07 isRestore=false sid=93fc681bebe8
dockerd[288]: time="2025-06-07T17:54:09.144648636Z" level=warning msg="Failed deleting service host entries to the running container: open : no such file or directory"
dockerd[288]: time="2025-06-07T17:54:09.165079239Z" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object [endpoint a6acaab6d2da3b9af3ae1a0d4b8e562796734b0925ea23dbad4ac190784121b2 b6a77be4652353802cc91af316c3a2c5dcc51f440894cb4d16f90321105193fa], retrying...."
dockerd[288]: time="2025-06-07T17:54:09.233191318Z" level=warning msg="Failed deleting service host entries to the running container: open : no such file or directory"
dockerd[288]: time="2025-06-07T17:54:09.233262630Z" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object [endpoint 9effa49890aa330215fd130f74346222e4c22238a41f6ddd03a99643081a22c9 db057c8411145de5977a400088ea854d69d4e8d91c4e4c0d92f96cc115c3eab0], retrying...."
dockerd[288]: time="2025-06-07T17:54:09.576272744Z" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object [endpoint_count a00f81e51bdf3593a561539cc2cff172cc516ece76d1472f3019699e2c98360d], retrying...."
dockerd[288]: time="2025-06-07T17:54:09.665654270Z" level=warning msg="error locating sandbox id 228c539d3bf0238c18627ffb2b65457726fe2a7bc787f159e4166bdf6ad5f7af: sandbox 228c539d3bf0238c18627ffb2b65457726fe2a7bc787f159e4166bdf6ad5f7af not found"
dockerd[288]: time="2025-06-07T17:54:09.665745885Z" level=warning msg="error locating sandbox id 93fc681bebe8a0f01d844790e3b4976e93df8896a7a63b13d6958ae00b11a155: sandbox 93fc681bebe8a0f01d844790e3b4976e93df8896a7a63b13d6958ae00b11a155 not found"
dockerd[288]: time="2025-06-07T17:54:09.665762888Z" level=warning msg="error locating sandbox id 5b667a372ea372ebe984e19d347e418a0914890dc86fed9396a6a1dcfbbb1fcb: sandbox 5b667a372ea372ebe984e19d347e418a0914890dc86fed9396a6a1dcfbbb1fcb not found"
dockerd[288]: time="2025-06-07T17:54:09.665775491Z" level=warning msg="error locating sandbox id 5baee3d673856933b5471ca8653269b7782963c70454abef0db1a42a5bbab7fa: sandbox 5baee3d673856933b5471ca8653269b7782963c70454abef0db1a42a5bbab7fa not found"
dockerd[288]: time="2025-06-07T17:54:09.665927317Z" level=info msg="Loading containers: done."
dockerd[288]: time="2025-06-07T17:54:09.704231584Z" level=info msg="Docker daemon" commit=45873be containerd-snapshotter=false storage-driver=overlay2 version=28.2.2
dockerd[288]: time="2025-06-07T17:54:09.704577644Z" level=info msg="Initializing buildkit"
dockerd[288]: time="2025-06-07T17:54:09.975573910Z" level=warning msg="CDI setup error /var/run/cdi: failed to monitor for changes: no such file or directory"
dockerd[288]: time="2025-06-07T17:54:09.975655524Z" level=warning msg="CDI setup error /etc/cdi: failed to monitor for changes: no such file or directory"
dockerd[288]: time="2025-06-07T17:54:10.072519878Z" level=info msg="Completed buildkit initialization"
dockerd[288]: time="2025-06-07T17:54:10.080711936Z" level=info msg="Daemon has completed initialization"
dockerd[288]: time="2025-06-07T17:54:10.080764344Z" level=info msg="API listen on /run/docker.sock"
systemd[1]: Started docker.service - Docker Application Container Engine.
systemd[1]: Starting docker.service - Docker Application Container Engine...
dockerd[288]: time="2025-06-07T17:55:08.947946189Z" level=info msg="Starting up"
dockerd[288]: time="2025-06-07T17:55:08.954312008Z" level=info msg="OTEL tracing is not configured, using no-op tracer provider"
dockerd[288]: time="2025-06-07T17:55:09.045951448Z" level=info msg="Creating a containerd client" address=/run/containerd/containerd.sock timeout=1m0s
dockerd[288]: time="2025-06-07T17:55:09.131789757Z" level=info msg="[graphdriver] using prior storage driver: overlay2"
dockerd[288]: time="2025-06-07T17:55:09.173111044Z" level=info msg="Loading containers: start."
dockerd[288]: time="2025-06-07T17:55:10.747079636Z" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object [endpoint_count bfda728adb25b406bb6d60d1d00bf829b4d38743841ed6a2aaf9235ef60097d1], retrying...."
dockerd[288]: time="2025-06-07T17:55:10.827731347Z" level=warning msg="error locating sandbox id 93fc681bebe8a0f01d844790e3b4976e93df8896a7a63b13d6958ae00b11a155: sandbox 93fc681bebe8a0f01d844790e3b4976e93df8896a7a63b13d6958ae00b11a155 not found"
dockerd[288]: time="2025-06-07T17:55:10.827808573Z" level=warning msg="error locating sandbox id 5baee3d673856933b5471ca8653269b7782963c70454abef0db1a42a5bbab7fa: sandbox 5baee3d673856933b5471ca8653269b7782963c70454abef0db1a42a5bbab7fa not found"
dockerd[288]: time="2025-06-07T17:55:10.827838983Z" level=warning msg="error locating sandbox id 5b667a372ea372ebe984e19d347e418a0914890dc86fed9396a6a1dcfbbb1fcb: sandbox 5b667a372ea372ebe984e19d347e418a0914890dc86fed9396a6a1dcfbbb1fcb not found"
dockerd[288]: time="2025-06-07T17:55:10.827859990Z" level=warning msg="error locating sandbox id 228c539d3bf0238c18627ffb2b65457726fe2a7bc787f159e4166bdf6ad5f7af: sandbox 228c539d3bf0238c18627ffb2b65457726fe2a7bc787f159e4166bdf6ad5f7af not found"
dockerd[288]: time="2025-06-07T17:55:10.827940917Z" level=info msg="Loading containers: done."
dockerd[288]: time="2025-06-07T17:55:10.864860090Z" level=info msg="Docker daemon" commit=45873be containerd-snapshotter=false storage-driver=overlay2 version=28.2.2
dockerd[288]: time="2025-06-07T17:55:10.865369859Z" level=info msg="Initializing buildkit"
dockerd[288]: time="2025-06-07T17:55:11.049823847Z" level=warning msg="CDI setup error /etc/cdi: failed to monitor for changes: no such file or directory"
dockerd[288]: time="2025-06-07T17:55:11.049874763Z" level=warning msg="CDI setup error /var/run/cdi: failed to monitor for changes: no such file or directory"
dockerd[288]: time="2025-06-07T17:55:11.085268766Z" level=info msg="Completed buildkit initialization"
dockerd[288]: time="2025-06-07T17:55:11.096468948Z" level=info msg="Daemon has completed initialization"
dockerd[288]: time="2025-06-07T17:55:11.096622096Z" level=info msg="API listen on /run/docker.sock"
systemd[1]: Started docker.service - Docker Application Container Engine.
Docker `ps` output:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-echo-1 docker-echo "sh -c 'ip route rep…" echo 42 seconds ago Up 41 seconds (healthy)
docker-ext-router-1 docker-ext-router "sh -c 'echo 1 > /pr…" ext-router 42 seconds ago Up 41 seconds
docker-int-router-1 docker-int-router "sh -c 'echo 1 > /pr…" int-router 42 seconds ago Up 41 seconds
docker-whirlpool-1 docker-whirlpool "sh -c 'ip route rep…" whirlpool 42 seconds ago Up 38 seconds (healthy) 8587/tcp
Docker `network ls` output:
NETWORK ID NAME DRIVER SCOPE
33c041423c59 bridge bridge local
77928de546bb docker_sea-cli-int bridge local
a6acaab6d2da docker_sea-rout-ext bridge local
9effa49890aa docker_sea-rout-int bridge local
a00779de4708 docker_sea-serv-ext bridge local
56c1279e9777 host host local
a81854b19274 none null local
Output of `ip addr show`:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:ac:42:53 brd ff:ff:ff:ff:ff:ff
inet 172.23.70.1/20 brd 172.23.79.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:feac:4253/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 52:a0:f5:42:60:58 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::50a0:f5ff:fe42:6058/64 scope link
valid_lft forever preferred_lft forever
24: br-a00779de4708: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether da:e7:e7:1e:ae:5c brd ff:ff:ff:ff:ff:ff
inet 10.42.0.1/24 brd 10.42.0.255 scope global br-a00779de4708
valid_lft forever preferred_lft forever
inet6 fe80::d8e7:e7ff:fe1e:ae5c/64 scope link
valid_lft forever preferred_lft forever
25: br-77928de546bb: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether ca:a1:11:b9:b7:67 brd ff:ff:ff:ff:ff:ff
inet 10.82.0.1/24 brd 10.82.0.255 scope global br-77928de546bb
valid_lft forever preferred_lft forever
inet6 fe80::c8a1:11ff:feb9:b767/64 scope link
valid_lft forever preferred_lft forever
26: br-9effa49890aa: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 06:f9:a1:94:88:69 brd ff:ff:ff:ff:ff:ff
inet 10.87.82.1/24 brd 10.87.82.255 scope global br-9effa49890aa
valid_lft forever preferred_lft forever
inet6 fe80::4f9:a1ff:fe94:8869/64 scope link
valid_lft forever preferred_lft forever
27: br-a6acaab6d2da: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 56:91:c7:06:21:c1 brd ff:ff:ff:ff:ff:ff
inet 10.87.42.1/24 brd 10.87.42.255 scope global br-a6acaab6d2da
valid_lft forever preferred_lft forever
inet6 fe80::5491:c7ff:fe06:21c1/64 scope link
valid_lft forever preferred_lft forever
Output of `ip route show`:
default via 172.23.64.1 dev eth0 proto kernel
10.42.0.0/24 dev br-a00779de4708 proto kernel scope link src 10.42.0.1 linkdown
10.82.0.0/24 dev br-77928de546bb proto kernel scope link src 10.82.0.1 linkdown
10.87.42.0/24 dev br-a6acaab6d2da proto kernel scope link src 10.87.42.1 linkdown
10.87.82.0/24 dev br-9effa49890aa proto kernel scope link src 10.87.82.1 linkdown
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
172.23.64.0/20 dev eth0 proto kernel scope link src 172.23.70.1