I run Docker Desktop (4.15.0) on Windows 10 (10.0.19044) and have encountered the odd problem that when running a Linux-container to communicate with a camera (Basler ace) via Ethernet (GigE), I never receive an image in the container.
Establishing a connection to the camera for configuration and triggering it works fine (both via TCP).
Copying the network traffic also shows that the camera actually sends back packages via UDP, but never get into the container.
Now here’s the odd thing: The exact same container and configuration works on a Linux host though.
The problem is reproducible (tested it on two Windows-PCs with activated and deactivated firewall).
Details:
Here is a snipped of the wireshark protocol:
1 0.000000 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Device Mode]
2 0.000449 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Device Mode] Value=0x80000001
3 0.002807 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Message channel Capability]
4 0.003245 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Message channel Capability] Value=0x00000000
5 0.007828 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Stream channels Capability]
6 0.008290 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Stream channels Capability] Value=0xC0000000
7 0.010702 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [GVCP Capability]
8 0.011119 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [GVCP Capability] Value=0xFE0E004F
9 0.013281 <IP address host> <IP address camera> GVCP 58 > READMEM_CMD (0x00000200 (512) bytes)
10 0.014076 <IP address camera> <IP address host> GVCP 566 < READMEM_ACK [First Choice of URL for XML device description file]
11 0.016494 <IP address host> <IP address camera> GVCP 58 > READMEM_CMD (0xC0000000 (536) bytes)
12 0.017157 <IP address camera> <IP address host> GVCP 590 < READMEM_ACK [Addr:0xC0000000]
13 0.019453 <IP address host> <IP address camera> GVCP 58 > READMEM_CMD (0xC0000218 (536) bytes)
...
177 0.271492 HewlettP_b7:3e:20 Basler_42:38:10 ARP 42 Who has <IP address camera>? Tell <IP address host>
178 0.271849 Basler_42:38:10 HewlettP_b7:3e:20 ARP 60 <IP address camera> is at 00:30:53:42:38:10
...
317 0.487833 <IP address host> <IP address camera> GVCP 58 > READMEM_CMD (0xC0013E40 (352) bytes)
318 0.488437 <IP address camera> <IP address host> GVCP 406 < READMEM_ACK [Addr:0xC0013E40]
319 0.678417 192.168.10.35 255.255.255.255 GVCP 60 > DISCOVERY_CMD
320 0.761697 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [CCP (Control Channel Privilege)] Value=0x00000002
321 0.762147 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
322 0.764929 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Device Mode]
323 0.765373 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Device Mode] Value=0x80000001
324 0.767752 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Message channel Capability]
325 0.768179 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Message channel Capability] Value=0x00000000
326 0.770272 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Stream channels Capability]
327 0.770716 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Stream channels Capability] Value=0xC0000000
328 0.774077 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [GVCP Capability]
329 0.774519 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [GVCP Capability] Value=0xFE0E004F
330 0.777852 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [GVCP Configuration]
331 0.778286 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [GVCP Configuration] Value=0x00000000
332 0.780490 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [GVCP Configuration] Value=0x00040000
333 0.780938 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
334 0.783927 <IP address host> <IP address camera> GVCP 58 > READMEM_CMD (0xE0000000 (40) bytes)
335 0.784468 <IP address camera> <IP address host> GVCP 94 < READMEM_ACK [Addr:0xE0000000]
336 0.787069 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
337 0.787527 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
338 0.791497 <IP address host> <IP address camera> GVCP 58 > READREG_CMD [Multiple Register Read Command]
339 0.791954 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Multiple ReadReg Ack]
340 0.794473 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Pending Timeout]
341 0.794905 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Pending Timeout] Value=0x000003E8
342 0.797685 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
343 0.798146 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
344 0.801242 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Heartbeat timeout]
345 0.801688 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Heartbeat timeout] Value=0x00000BB8
346 0.805313 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x000B0000]
347 0.805865 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x000B0000] Value=0xE8000000
348 0.809514 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x000B0120]
...
424 1.036258 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x00130004]
425 1.036761 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x00130004] Value=0x00000000
426 1.039122 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [SCPS0 (Stream Channel #0 Packet Size)]
427 1.039560 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [SCPS0 (Stream Channel #0 Packet Size)] Value=0x400005DC
428 1.042530 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x00130004]
429 1.043029 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x00130004] Value=0x00000000
430 1.045462 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x00130004]
...
801 1.546954 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x00040500] Value=0xF8000000
802 1.548792 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
803 1.549207 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
804 1.551223 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x00040600]
805 1.551733 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x00040600] Value=0xF8000000
806 1.553703 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x00040620]
...
1023 1.863534 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x00130004] Value=0x00000000
1024 1.865594 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Number of network interfaces]
1025 1.866006 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Number of network interfaces] Value=0x00000001
1026 1.867904 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x00130004]
1027 1.868432 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x00130004] Value=0x00000000
1028 1.870336 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x00138024]
1029 1.870843 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x00138024] Value=0x00000000
1030 1.874242 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [GVCP Configuration]
1031 1.874674 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [GVCP Configuration] Value=0x00000000
1032 1.877290 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x000700C0]
1033 1.877804 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x000700C0] Value=0xE8000000
1034 1.879845 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x000700E0]
...
1782 2.952108 <IP address host> 239.255.255.250 SSDP 217 M-SEARCH * HTTP/1.1
...
1788 2.960215 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x00130004] Value=0x00000000
1789 2.962323 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [SCPS0 (Stream Channel #0 Packet Size)]
1790 2.962755 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [SCPS0 (Stream Channel #0 Packet Size)] Value=0x400005DC
...
5781 42.086721 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x000B0100]
5782 42.087282 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x000B0100] Value=0xE8000000
5783 42.090095 <IP address host> <IP address camera> GVCP 82 > WRITEREG_CMD [Multiple Register Write Command]
5784 42.090848 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK [Multiple WriteReg Ack] (4/4) (Success)
5785 42.093459 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Addr:0x00040024] Value=0x00000001
5786 42.094261 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
5787 42.097083 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x0004020C]
5788 42.097603 <IP address camera> <IP address host> UDP 86 49152 → 46000 Len=44
5789 42.097635 <IP address host> <IP address camera> ICMP 114 Destination unreachable (Port unreachable)
5790 42.097925 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5791 42.097925 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x0004020C] Value=0xC0000000
5792 42.098041 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5793 42.098159 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5794 42.098259 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5795 42.098389 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5796 42.098513 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5797 42.098728 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5798 42.098784 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5799 42.098880 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5800 42.099008 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5801 42.099138 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5802 42.099257 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5803 42.099377 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5804 42.099498 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5805 42.099627 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5806 42.099755 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5807 42.099883 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5808 42.099987 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5809 42.100116 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5810 42.100234 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5811 42.100352 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5812 42.100491 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5813 42.100612 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5814 42.100651 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x00040204]
5815 42.100742 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
5816 42.100879 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
...
6161 42.143294 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
6162 42.143414 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
6163 42.143542 <IP address camera> <IP address host> UDP 1514 49152 → 46000 Len=1472
6164 42.144637 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x00040204] Value=0x00000000
6165 42.347569 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6166 42.348037 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6167 43.104153 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6168 43.104619 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6169 43.859002 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6170 43.859434 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6171 44.612915 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6172 44.613397 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6173 45.367889 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6174 45.368388 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6175 45.710015 <IP address host> <IP address camera> GVCP 50 > DISCOVERY_CMD
6176 45.710530 <IP address camera> <IP address host> GVCP 298 < DISCOVERY_ACK (Basler, 24339728)
6177 46.124258 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6178 46.124722 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6179 46.880932 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6180 46.881440 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6181 47.638045 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6182 47.638542 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6183 48.394350 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6184 48.394831 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6185 49.150753 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6186 49.151183 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6187 49.905999 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6188 49.906515 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6189 50.272979 HewlettP_b7:3e:20 Basler_42:38:10 ARP 42 Who has <IP address camera>? Tell <IP address host>
6190 50.273442 Basler_42:38:10 HewlettP_b7:3e:20 ARP 60 <IP address camera> is at 00:30:53:42:38:10
6191 50.660881 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6192 50.661334 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6193 50.677961 192.168.10.35 255.255.255.255 GVCP 60 > DISCOVERY_CMD
6194 51.416059 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6195 51.416580 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6196 51.989002 <IP address host> <IP address camera> UDP 58 62841 → 49152 Len=16
6197 51.989533 <IP address camera> <IP address host> ICMP 70 Destination unreachable (Port unreachable)
6198 52.172433 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Heartbeat timeout] Value=0x00000BB8
6199 52.172964 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6200 52.348063 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [Addr:0x00040044] Value=0x00000000
6201 52.348799 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6202 52.352191 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [SCP0 (Stream Channel #0 Port)] Value=0x00000000
6203 52.352875 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6204 52.363528 <IP address host> <IP address camera> GVCP 58 > WRITEREG_CMD [MCP (Message Channel Port)] Value=0x00000000
6205 52.364075 <IP address camera> <IP address host> GVCP 60 < WRITEREG_ACK (Success)
6206 52.372065 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x00130004]
6207 52.372640 <IP address camera> <IP address host> GVCP 60 < READREG_ACK [Addr:0x00130004] Value=0x00000000
6208 52.375307 <IP address host> <IP address camera> GVCP 54 > READREG_CMD [Addr:0x00130004]
The windows host <PI address host>
is addressed and the relevant ports are forwarded to the container.
See the docker-compose
file:
version: "3"
services:
basler-camera-service:
container_name: basler-camera
build:
dockerfile: Dockerfile
ports:
- 5001:5000
- 3956:3956 # Basler communication
- 46000:46000 # set Streaming Port to fixed value with pylonViewer
- 5901:5920 # VNC viewer
I spare you the details on the container with the [Basler Pylon](pylon 7.2.1 Camera Software Suite Linux x86 (64 Bit) - Debian Installer Package | Basler installation to communicate with the camera as it obviously works (on Linux). The streaming is set to multicast and the destination port to 46000.
It seems to only occur on Docker for Windows (BTW: it doesn’t matter whether I use Docker Desktop or spin up a virtual machine with Linux and use Docker from there).