Как запустить docker exec из php?
Я пытаюсь запустить docker exec из php под Nginx и получаю такую ошибку:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/konfetki_db_1/json: dial unix /var/run/docker.sock: connect: permission denied
Это работает из командной строки, но говорит 'permission denied' при попытке запуска из-под nginx с www-data вместо root.
Есть ли какой-нибудь способ запустить это?
Ответы (3 шт):
Попробуйте, либо выполнить от рута (sudo su\su root), либо у вас должен быть специальный пользователь, входящий в группу docker.
Пользователь должен быть в группе docker.
Если php в контейнере, то можно попробовать пробросить сокет, или зайти на хост по ssh.
Но я бы вообще не делал docker exec из контейнера, торчащего наружу php -- выглядит не безопасно.
Я подозреваю, что Nginx доступен из интернета. Может быть уязвимость в php (такое бывало не раз), или типовая уязвимость в вашем коде, которую может использовать хакер-бот (который живет в этом самом интернете). Соответственно окружение, где у вас этот сервер будет взломано.
Если сервер находится в контейнере, а php запускался не от root-a, то есть шанс, что на этом всё закончится -- взломан 1 контейнер.
Если из сервера можно делать docker exec, значит взломан хост со всеми контейнерами (и устройствами).
Для меня сработал вот этот способ:
Add docker group
$ sudo groupadd docker
Add your current user to docker group
$ sudo usermod -aG docker www-data
Switch session to docker group
$ newgrp - docker
Run an example to test
$ docker run hello-world