Как запустить 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 шт):

Автор решения: Dmitry Punk

Попробуйте, либо выполнить от рута (sudo su\su root), либо у вас должен быть специальный пользователь, входящий в группу docker.

→ Ссылка
Автор решения: Sergei Kirjanov

Пользователь должен быть в группе 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
→ Ссылка