GitLab Runner unable to run Docker commands

I have a GitLab Runner using a Shell Executor that needs to build a Docker container. When it executes the first Docker command it gets this error:

docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied'))

If I logon as the gitlab-runnner user and try to execute docker commands manually I get this error:

$ docker ps
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.47/containers/json": dial unix /var/run/docker.sock: connect: permission denied

A quick Google and I need to add the gitlab-runner to the Docker group to grant it permission to execute Docker:

sudo usermod -a -G docker $USER

GitLab – no runners for project

Setting up a new self-hosted GitLab, the pipeline for my project is stuck with this error:

… which looks like there are no runners available for the project. I know I have a runner available because I set one up yesterday, so taking a closer look.

In the CI/CD settings for my project, I think I see my shared runner:

Looking in the admin settings, it looks like when I set it up I used the tag ‘shared’:

The error says ‘no runners match all of the job’s tags: docker-test’, so I think what I need to do is change the tags on my runner to match. I edited the tags to remove ‘shared’ and replaced with ‘docker-test’ and now the job starts running! On to the next errors!

Docker build fails during ‘apt-get install’ with 404 errors

While running ‘docker build’ for a new image using ubuntu:22.04 as the base, running apt-get install for certain packages is giving random 404s on some package dependencies.

For example:

#7 7.691 Err:1 http://ports.ubuntu.com/ubuntu-ports jammy-updates/main arm64 libpython3.10-minimal arm64 3.10.12-1~22.04.5
#7 7.691 404 Not Found [IP: 185.125.190.36 80]

If I run ubuntu:22.04 and then run the ‘apt-get install’ steps manually, they run as expected.

This post here has some tips that previously cached layers when building the image may be causing this, and to run ‘docker build –no-cache’ to avoid using the previously cached layers. Fixed!

Setting user prompted values during apt-get install (e.g. tzdata)

Installing php-fpm on Ubuntu 22:04 prompts for some timezone values during install which makes it more difficult to install during a ‘docker build’ since passing -y to apt-get-install is not enough to respond to the prompts.

Here’s what I’m prompted for if I just run ‘apt-get install php-fpm’:

Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.

1. Africa 3. Antarctica 5. Arctic 7. Atlantic 9. Indian 11. US
2. America 4. Australia 6. Asia 8. Europe 10. Pacific 12. Etc
Geographic area: 8

Please select the city or region corresponding to your time zone.

1. Amsterdam 17. Guernsey 33. Monaco 49. Stockholm
2. Andorra 18. Helsinki 34. Moscow 50. Tallinn
3. Astrakhan 19. Isle_of_Man 35. Nicosia 51. Tirane
4. Athens 20. Istanbul 36. Oslo 52. Tiraspol
5. Belfast 21. Jersey 37. Paris 53. Ulyanovsk
6. Belgrade 22. Kaliningrad 38. Podgorica 54. Uzhgorod
7. Berlin 23. Kirov 39. Prague 55. Vaduz
8. Bratislava 24. Kyiv 40. Riga 56. Vatican
9. Brussels 25. Lisbon 41. Rome 57. Vienna
10. Bucharest 26. Ljubljana 42. Samara 58. Vilnius
11. Budapest 27. London 43. San_Marino 59. Volgograd
12. Busingen 28. Luxembourg 44. Sarajevo 60. Warsaw
13. Chisinau 29. Madrid 45. Saratov 61. Zagreb
14. Copenhagen 30. Malta 46. Simferopol 62. Zaporozhye
15. Dublin 31. Mariehamn 47. Skopje 63. Zurich
16. Gibraltar 32. Minsk 48. Sofia
Time zone: 27


Current default time zone: 'Europe/London'
Local time is now: Tue Sep 24 16:39:08 BST 2024.
Universal Time is now: Tue Sep 24 15:39:08 UTC 2024.
Run 'dpkg-reconfigure tzdata' if you wish to change it.

From answers on this post, the easiest option (rather than setting values for the prompted values) is to run in non-interactive mode, and just default the tz to UTC, with:

DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get install php-fpm