fix: add tigervnc dependency and update DinD for compatibility
An issue encountered when launching the webterm container in GNS3, where VNC support fails due to a missing TigerVNC server.
The log containing the error message:
2025-04-29 06:53:46 INFO gns3server.compute.docker.docker_vm:1279 Docker container "webterm-1" [29854099-0eb2-4578-821c-8efa66bf0ff4]: number of Ethernet adapters changed to 1
2025-04-29 06:53:46 INFO gns3server.compute.docker.docker_vm:222 Docker container "webterm-1" [29854099-0eb2-4578-821c-8efa66bf0ff4]: MAC address changed to 02:42:85:40:99:00
2025-04-29 06:53:46 INFO gns3server.compute.docker.docker_vm:440 Image 'gns3/webterm:latest' is missing, pulling it from Docker hub...
2025-04-29 06:54:30 INFO gns3server.compute.docker.docker_vm:342 Mount resources from "/root/.local/share/GNS3/docker"
**_2025-04-29 06:54:30 ERROR gns3server.api.routes.compute:133 Compute node error: Please install TigerVNC server before using VNC support_**
2025-04-29 06:54:30 ERROR gns3server.api.server:180 Controller received error from compute for request 'http://127.0.0.1:3080/v3/compute/projects/0229af01-188d-410f-9c32-b76e4d324c08/docker/nodes': Please install TigerVNC server before using VNC support
the solution to this issue it either:
fix no.1 docker exec -it gns3 sh -c 'apk update && apk add tigervnc'
fix no.2 the permanent solution which is adding tigervnc to the dependencies.json. As of this writing, the tigerVNC version i included on the dependencies.json is 1.13.1-r5
The second issue addressed here #198 is when starting docker containers with incompatible busybox symlinking.
this command ln -s /bin/busybox /usr/lib/python*/site-packages/gns3server/compute/docker/resources/bin symlinks to the resources that docker containers used (webterm, ipterm, etc.) which are incompatible because the busybox is alpine compatible only
the workaround to this issue is to use different busybox and can be downloaded here https://syndamia.com/tutorials/gns3-initsh-no-such-file/
i did test the busybox downloaded from the url and the container starts magically with no error.
So i added a permanent solution in the Dockerfile with this lines:
# downloaded the busybox and then copy it to tmp folder
COPY ./bin /tmp/bin
...
RUN cp /tmp/bin/busybox /usr/lib/python*/site-packages/gns3server/compute/docker/resources/bin
Thank you for looking in to this. Please allow me some time to review, as I am currently on holiday.
Thanks for the fix. To make sure everybody can trace where the modified busybox came from, can you change the dockerfile to download it during build process, instead of adding it to git?
Other then that, thank you very much for looking into this. I would not have found this myself for sure!
Actually, maybe it would be even better to copy the binary directly from the busybox docker container using a multistage build; that way this container is automatically rebuild whenever the upstream container gets a new version.
Is this something that you can investigate @rimorgin?
i'm excited on this :)
using multi-stage build is definitely the appropriate fix for this one, glad you point that out. I'll investigate it and give me some time.