Необходимо управлять (создавать/удалять/запускать...) контейнерами с помощью docker-php. Сам сервис по управлению должен быть в отдельном контейнере.
У контейнера с php-fpm нет прав на использование на смонтированный docker.sock. Каким безопасным способом предоставить контейнеру php-fpm права rw на docker.socket?
Есть сервис в docker-compose, основная его часть приведена ниже. В нем nginx, php-fpm (Dockerfile сборки ниже). В контейнере php-fpm крутится yii2 приложение.
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
Когда я пытаюсь создать контейнер, использую docker-php, то получаю ошибку:
Http \ Client \ Socket \ Exception \ ConnectionException - Permission denied
Насколько я понял, то проблема в группах пользователей. Т.е. группа в контейнере php-fpm не может читать/писать из/в docker.sock. Google мне указывал на проблему с группами, в основном эти посты были про jenkins:
Что я имею:
Права docker.sock на хосте:
docker:x:134:dmitriy,www-data
Dockerfile для php-fpm:
FROM php:7.1-fpm
ENV DEBIAN_FRONTEND noninteractive
# PHP
# intl
RUN apt-get update \
&& apt-get install -y libicu-dev \
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl
# xml
RUN apt-get update \
&& apt-get install -y \
libxml2-dev \
libxslt-dev \
&& docker-php-ext-install \
dom \
xmlrpc \
xsl
# images
RUN apt-get update \
&& apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libgd-dev \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install \
gd \
exif
# database
RUN docker-php-ext-install \
mysqli \
pdo \
pdo_mysql
# strings
RUN docker-php-ext-install \
gettext \
mbstring
# math
RUN apt-get update \
&& apt-get install -y libgmp-dev \
&& ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h \
&& docker-php-ext-install \
gmp \
bcmath
# compression
RUN apt-get update \
&& apt-get install -y \
libbz2-dev \
zlib1g-dev \
&& docker-php-ext-install \
zip \
bz2
# ftp
RUN apt-get update \
&& apt-get install -y \
libssl-dev \
&& docker-php-ext-install \
ftp
# ssh2
RUN apt-get update \
&& apt-get install -y \
libssh2-1-dev
# memcached
RUN apt-get update \
&& apt-get install -y \
libmemcached-dev \
libmemcached11
# others
RUN docker-php-ext-install \
soap \
sockets \
calendar \
sysvmsg \
sysvsem \
sysvshm
# docker.io
RUN groupadd -r -g 999 docker
RUN usermod -aG docker $(whoami)
RUN apt-get update \
&& apt-get install -y \
docker
В контейнере php-fpm: id
uid=0(root) gid=0(root) groups=0(root),999(docker)
groups
root docker
/etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:
tape:x:26:
sudo:x:27:
audio:x:29:
dip:x:30:
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
input:x:101:
systemd-journal:x:102:
systemd-timesync:x:103:
systemd-network:x:104:
systemd-resolve:x:105:
systemd-bus-proxy:x:106:
docker:x:999:root
Код создания контейнера (копипаст из документации):
$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;
Если я назначу права 777 для docker.sock, то все будет работать, но это "решение" совсем не годится.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем привет! Подскажите пожалуйстаХочу сделать появление кнопки через fadeIn, и если на неё в течении 3-х секунд не кликнуть, то она исчезнет,...
Имеем структуру: пакет-документ-страницаИмеем API, выдающее данные по запросу:
Добрый день всем, прошу вашей помощи ибо сам не могу сделать) Есть несколько дивов, с одинаковыми классами (selected), нужно чтобы в переменную...