Я использую 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, то все будет работать, но это плохое решение =)