Я добавил пользователя без полномочий root в группу Docker, и другая служба запустилась, когда этот пользователь без полномочий root подключился к демону Docker. но сервис не может работать. Я делаю тестовый пример для этого:
root@# systemctl start docker.service
root@# gpasswd -a tiger docker
создать сервис systemd в тигре:
[Service]
ExecStart=/home/tiger/connectdocker
Restart=always
StartLimitInterval=0
Delegate=true
KillMode=process
[Install]
WantedBy=default.target
вот /home/tiger/connectdocker
так:
docker run -itd busybox 2> connectdocker.log
запустить этот сервис:
tiger@# systemctl --user enable connectdocker.service
tiger@# systemctl --user start connectdocker.service
и результат:
Thu Jul 21 00:59:15 CST 2016
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
но я могу подключиться к docker.sock с тигром:
tiger@# docker run -itd busybox
997e99f959cfd5500319935ec17677775da9d367d203a11efef8b42161c3ee64
чтобы доказать это, я меняю /var/run/docker.sock
группу с докера на тигра, и сервис connectdocker может подключаться к демону docker.
изменить /var/run/docker.sock
:
ls -l /run/docker.sock
srw-rw---- 1 root docker 0 Jul 21 00:33 /run/docker.sock
чтобы:
ls -l /run/docker.sock
srw-rw---- 1 root tiger 0 Jul 21 00:33 /run/docker.sock
Ответы:
Вы должны использовать
User=
директиву в вашемsystemd
сервисе.https://www.freedesktop.org/software/systemd/man/systemd.exec.html#User=
Я также рекомендовал бы переместить ваш скрипт из домашнего каталога в стандартный путь, например
/usr/local/bin
или что-то подобное.Вы также должны обеспечить порядок ваших
connectdocker.service
, указав егоAfter=docker.service
иRequires=docker.service
. Как написано,connectdocker.service
вероятно, он пытается начать примерно в то же времяdocker.service
, что и вам нужно подождать,docker.service
пока он не подключится, прежде чем вы сможете подключиться к нему.https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requires=
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before=
источник