При работе с GitLab CI/CD может возникнуть ситуация, когда вы сталкиваетесь с ошибкой "Permission Denied при доступе к docker.sock". Она указывает на проблемы с доступом к Docker-демону, которые могут быть из-за неправильной конфигурации или настроек окружения. В данной статье рассмотрим причины этой ошибки и как её можно исправить.

Ошибка может выглядеть так:

$ docker compose -f docker-compose.yml down
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.oneoff%3DFalse%22%3Atrue%2C%22com.docker.compose.projec%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied

Она указывает на недостаток прав доступа. Убедитесь, что GitLab Runner имеет доступ к Docker Daemon. Для этого можно добавить пользователя, под которым запускается GitLab Runner, в группу docker:

sudo usermod -aG docker user-name

Перезапустите GitLab Runner, чтобы изменения вступили в силу:

sudo systemctl restart gitlab-runner

Также перезапустите Docker:

sudo systemctl restart docker

Убедитесь, что GitLab Runner настроен на использование shell executor и запускает команды от имени правильного пользователя.

[[runners]]
 name = "Your Runner"
 url = "https://gitlab.com/"
 token = "YOUR_TOKEN"
 executor = "shell"

Убедитесь, что владелец и группа владельцев файла docker.sock позволяют доступ текущему пользователю или группе, от которой запущена команда Docker Compose.

ls -l /var/run/docker.sock

Результат должен выглядеть примерно так:

srw-rw---- 1 root docker 0 Jun 29 10:00 /var/run/docker.sock