J'ai installé Docker via snap lors de la configuration d'Ubuntu Server 18.10.
Si j'ai un fichier d'unité systemd qui référence la commande docker
, j'obtiens cette erreur:
Executable "docker" not found in path "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Je ne sais pas où il obtient ce chemin de recherche. Il ne correspond pas à ce qui se trouve dans/etc/environment.
Sans modification du fichier d'unité, puis-je changer globalement le chemin de recherche utilisé par systemd pour inclure /snap/bin
?
Sur un système Ubuntu 18.04, le simple fait d'utiliser docker
sans le chemin complet a entraîné l'erreur Executable path is not absolute
. Je souhaite idéalement que le même fichier de service fonctionne avec les packages Docker de snap et docker-ce d'apt.
Selon la documentation systemd , son CHEMIN est défini lors de la compilation (voir la section "Lignes de commande"):
Si la commande n'est pas un chemin complet (absolu), elle sera résolue en chemin complet en utilisant un chemin de recherche fixe déterminé lors de la compilation . Les répertoires recherchés incluent/usr/local/bin /,/usr/bin /,/bin/sur les systèmes utilisant les répertoires split/usr/bin/et/bin /, et leurs homologues sbin/sur les systèmes utilisant split bin/et sbin /. Il est donc sûr d'utiliser uniquement le nom de l'exécutable dans le cas d'exécutables situés dans l'un des répertoires "standard", et un chemin absolu doit être utilisé dans les autres cas . L'utilisation d'un chemin absolu est recommandée pour éviter toute ambiguïté. Astuce: ce chemin de recherche peut être interrogé en utilisant systemd-path search-binaries-default.
La commande pour interroger le chemin sur mon Ubuntu 18.04 était Sudo systemd-path search-binaries
(sur Arch, c'était systemd-path search-binaries-default
):
$ Sudo systemd-path search-binaries
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Vous disposez donc des options suivantes:
Le bon : éditez le fichier d'unité pour qu'il utilise des chemins absolus. En supposant que vous y ayez accès, c'est de loin la meilleure solution. Il rend le fichier conforme aux spécifications, il vous permet de le copier sur d'autres machines, il fait même taire les messages d'avertissement.
Le mauvais : recompilez systemd
à partir de la source et changez le chemin. C'est long, compliqué et une mauvaise idée à moins que vous ne sachiez vraiment ce que vous faites. Même si vous le faites, cela semble être une mauvaise solution. Vous ne pourrez pas recompiler systemd
chaque fois que vous configurerez une nouvelle machine.
Le laid : Si vous ne pouvez vraiment pas réparer le fichier d'unité, vous pouvez toujours créer un lien symbolique dans /usr/bin
pointant vers docker
Sudo ln -s /snap/bin/docker /usr/bin/docker
C'est la façon de résoudre ce problème.
Pour vérifier la valeur de la variable PATH:
echo $PATH
Pour ajouter/snap/bin
export PATH="$PATH:/snap/bin"
Si cela ne fonctionne pas, il existe un fichier appelé/etc/environment