Речь про продукт https://testcontainers.com/. Дошли руки наконец переделать CI с тестами (используют внутри фреймворк testcontainers), testcontainers требует наличия docker daemon, чтобы запускать контейнеры и прогонять тесты. У нас Gitalb имеет раннеры с docker executor, поэтому некоторое время для запуска таких тестов использовался проброс docker.sock внутрь контейнера:
# cat /etc/gitlab-runner/config.toml
...
[runners.docker]
volumes = ["/var/run/docker.sock:/var/run/docker.sock", ...
Всем понятно, что это ОЧЕНЬ не безопасно, т.к. дает возможность получить рутовый доступ к машине с раннером из среды CI. Проблему можно сильно уменьшить, если раннер сделать не уровня instance level, а сделать доступным только для определенных реп, где в CI используется testcontainers.
Лучше всего избавится от проброса docker.sock, в качестве варианта решения проблемы приходит на помощь софт podman.
1. ставим podman на линукс сервер
2. ставим доп пакеты - uidmap и passt
3. создаем юзера podman (или любого другого)
4. создаем systemd service:
# systemctl cat podman-api /etc/systemd/system/podman-api.service [Install] WantedBy=multi-user.target [Service] Environment="HOME=/home/podman" ExecStart=podman system service -t 0 unix:///home/podman/podman.sock Group=podman Restart=always StandardError=journal StandardOutput=journal Type=simple User=podman [Unit] Description=Run podman sock with podman user rights
systemctl start podman-api systemdctl enable podman-api
5. В конфиге config.toml раннера меняем:
[runners.docker] ... volumes = ["/home/podman/podman.sock:/var/run/docker.sock"
Если всё было сделано верно, то код тестов менять не придется, podman имеет такое же API, что и у docker (бОльшей частью). Из возможных проблем - может понадобиться указать полное имя образов (т.к. в отличие от docker, podman не смотрит по дефолту в регистри docker,io)
Пример логов:
journalctl -f -u podman-api ... podman[3724210]: time="2026-01-30T11:55:00+03:00" level=warning msg="IdleTracker: StateClosed transition by connection marked un-managed" X-Reference-Id=0xc000011138 podman[3724210]: Trying to pull docker.io/library/mysql:5.7.21... podman[3724210]: Getting image source signatures podman[3724210]: Copying blob sha256:38680a9b47a889afdad30e2b778870f30b2adfb670996da71d32fef815446b32 podman[3724210]: Copying blob sha256:c5317a34eddd75b2b48e525137d7d7adc1cbba157fe58eb2fc60bf93b68c7b28 podman[3724210]: Copying blob sha256:4c732aa0eb1bf8ee7a7dfdb2acdb3d1579110241fe47747d2b14a77e2cb504e2 ... podman[3724210]: 2026-01-30 11:55:01.439923525 +0300 MSK m=+287.566402543 image pull docker.io/library/mysql:5.7.21 podman[3724210]: 2026-01-30 11:55:18.477399695 +0300 MSK m=+304.603878696 volume create 3602b74eea868b243f29019ee4b41f09d63de3afbd10943acc4213668855a68a podman[3724210]: 2026-01-30 11:55:18.488450879 +0300 MSK m=+304.614929896 container create 7d046192e872cbb695f0086ac2d7ebc246b8523b7f457e4e8782785063cd54a6 (image=docker.io/library/mysql:5.7.21, name=blissful_panini, org.testcontainers=true, org.testcontainers.lang=java, org.testcontainers.version=1.19.1, org.testcontainers.sessionId=XXX)


