Agregué un usuario no root en el grupo docker, y otro servicio se ejecuta cuando este usuario no root se conecta al docker daemon. Pero el servicio no puede funcionar. Hago un ejemplo de prueba para esto:
root@# systemctl start docker.service
root@# gpasswd -a tiger docker
crear un servicio systemd en tiger:
[Service]
ExecStart=/home/tiger/connectdocker
Restart=always
StartLimitInterval=0
Delegate=true
KillMode=process
[Install]
WantedBy=default.target
la /home/tiger/connectdocker
siguiente manera:
docker run -itd busybox 2> connectdocker.log
iniciar este servicio:
tiger@# systemctl --user enable connectdocker.service
tiger@# systemctl --user start connectdocker.service
y el resultado:
Thu Jul 21 00:59:15 CST 2016
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
pero me puedo conectar a docker.sock con tiger:
tiger@# docker run -itd busybox
997e99f959cfd5500319935ec17677775da9d367d203a11efef8b42161c3ee64
para probar eso, cambio el /var/run/docker.sock
grupo de docker a tiger, y el servicio connectdocker puede conectarse a docker daemon.
cambio /var/run/docker.sock
:
ls -l /run/docker.sock
srw-rw---- 1 root docker 0 Jul 21 00:33 /run/docker.sock
a:
ls -l /run/docker.sock
srw-rw---- 1 root tiger 0 Jul 21 00:33 /run/docker.sock
Respuestas:
Debe usar la
User=
directiva en susystemd
servicio.https://www.freedesktop.org/software/systemd/man/systemd.exec.html#User=
También recomendaría mover su script de un directorio de inicio a una ruta estándar, como
/usr/local/bin
o algo similar.También debe garantizar el pedido de su
connectdocker.service
dándole elAfter=docker.service
yRequires=docker.service
. Tal como está escrito,connectdocker.service
probablemente esté tratando de comenzar aproximadamente al mismo tiempo que eldocker.service
, y deberá esperar adocker.service
que se active antes de poder conectarse.https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requires=
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before=
fuente