Ich habe einen Nicht-Root-Benutzer in der Docker-Gruppe hinzugefügt und einen anderen Dienst ausgeführt, während dieser Nicht-Root-Benutzer eine Verbindung zum Docker-Daemon herstellt. aber der service kann nicht funktionieren. Ich mache ein Testbeispiel dafür:
root@# systemctl start docker.service
root@# gpasswd -a tiger docker
Erstellen Sie einen System-Service in Tiger:
[Service]
ExecStart=/home/tiger/connectdocker
Restart=always
StartLimitInterval=0
Delegate=true
KillMode=process
[Install]
WantedBy=default.target
das /home/tiger/connectdocker
wie folgt:
docker run -itd busybox 2> connectdocker.log
Starten Sie diesen Dienst:
tiger@# systemctl --user enable connectdocker.service
tiger@# systemctl --user start connectdocker.service
und das Ergebnis:
Thu Jul 21 00:59:15 CST 2016
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
aber ich kann mich mit tiger mit docker.sock verbinden:
tiger@# docker run -itd busybox
997e99f959cfd5500319935ec17677775da9d367d203a11efef8b42161c3ee64
Um dies zu beweisen, ändere ich die /var/run/docker.sock
Gruppe von Docker zu Tiger, und der Connectdocker-Dienst kann eine Verbindung zum Docker-Daemon herstellen.
Änderung /var/run/docker.sock
:
ls -l /run/docker.sock
srw-rw---- 1 root docker 0 Jul 21 00:33 /run/docker.sock
zu:
ls -l /run/docker.sock
srw-rw---- 1 root tiger 0 Jul 21 00:33 /run/docker.sock
Antworten:
Sie sollten die
User=
Richtlinie in Ihremsystemd
Dienst verwenden.https://www.freedesktop.org/software/systemd/man/systemd.exec.html#User=
Ich würde auch empfehlen, Ihr Skript von einem Home-Verzeichnis in einen Standardpfad
/usr/local/bin
oder ähnliches zu verschieben.Sie sollten auch die Bestellung Ihres sicherstellen,
connectdocker.service
indem Sie ihm dasAfter=docker.service
und gebenRequires=docker.service
. Wie geschriebenconnectdocker.service
steht, versucht der wahrscheinlich, ungefähr zur gleichen Zeit wie der zu startendocker.service
, und Sie müssen warten,docker.service
bis er aktiv ist, bevor Sie eine Verbindung herstellen können.https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requires=
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before=
quelle