Как безопасно получить права доступа к docker.sock из контейнера? - PullRequest
0 голосов
/ 02 мая 2018

Я использую docker-php с nginx + php-fpm (проект docker-compose). Когда я пытаюсь запустить пример из документации :

<?php
use Docker\API\Model\ContainersCreatePostBody;
use Docker\Docker;
$docker= Docker::create();
$containerConfig = new ContainersCreatePostBody();
$containerConfig->setImage('nginx:latest');
$containerConfig->setCmd(['echo', 'I am running a command']);
$containerCreateResult = $docker->containerCreate($containerConfig);
var_dump($containerCreateResult);
exit;

и я получаю ошибку:

Http \ Client \ Socket \ Exception \ ConnectionException - Permission denied

Насколько я понимаю, проблема в том, что группа пользователей, которую использует php-fpm, не имеет прав rw на docker.sock (я монтирую ее с хоста, на котором работает докер).

Конфигурация:

докер-Compose:

Каталог оболочки содержит приложение на yii2, которое используется docker-php.

version: '2'
services:
web:
  image: 'nginx:latest'
  container_name: web
  ports:
    - '80:80'
    - '443:443'
  volumes:
    - './:/shell'
  networks:
    - backend
    - frontend
  restart: always
php:
  build: ./docker/php/
  container_name: php
  volumes:
    - './:/shell'
    - '/var/run/docker.sock:/var/run/docker.sock'
  environment: []
  networks:
    - backend
  restart: always
networks:
frontend:
  driver: bridge
backend:
  driver: bridge

Dockerfile для php-fpm: github gist (слишком большой файл для поста ~ 100 строк)

Docker установлен для эксперимента, и поэтому он бесполезен в контейнере php-fpm.

Версии программного обеспечения:

  • Docker версия 1.13.1
  • docker-compose версия 1.8.0
  • Kubuntu 17.10 x64

Я нашел в Интернете нечто подобное ( один , два , три ...), решение состоит в том, чтобы добавить пользователя, от которого Приложение работает в контейнере, в группу www-data.

Если я назначу 777 прав на docker.sock, то все будет работать, но это плохое решение =)

...