我在设置 Ubuntu Server 18.10 时通过 snap 安装了 Docker。
如果我有一个引用该docker
命令的 systemd 单元文件,我会收到以下错误:
Executable "docker" not found in path "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
我不确定它在哪里得到这个搜索路径。它与 /etc/environment 中的内容不匹配。
在不修改单元文件的情况下,我可以将 systemd 使用的搜索路径全局更改为 include/snap/bin
吗?
在 Ubuntu 18.04 系统上,仅使用docker
没有完整路径会导致错误Executable path is not absolute
。理想情况下,我希望同一个服务文件同时使用 snap 的 Docker 和 apt 的 docker-ce 包。
根据systemd 文档,它的 PATH 是在编译时设置的(参见“命令行”部分):
在我的 Ubuntu 18.04 上查询路径的命令是
sudo systemd-path search-binaries
(在 Arch 上,它是systemd-path search-binaries-default
):因此,您有以下选择:
好处:编辑单元文件,使其使用绝对路径。假设您可以访问它,这是迄今为止最好的解决方案。它使文件符合规范,它允许您将它复制到其他机器,它甚至可以使警告消息静音。
坏处:
systemd
从源代码重新编译,并更改路径。除非您真的知道自己在做什么,否则这是一个耗时、复杂且全面的坏主意。即使你这样做,这似乎也是一个糟糕的解决方案。systemd
每次设置新机器时都无法重新编译。丑陋的:如果你真的不能修复单元文件,你总是可以创建一个符号链接
/usr/bin
指向docker
这是解决此问题的方法。
检查变量 PATH 的值:
添加 /snap/bin
如果这不起作用,则有一个名为 /etc/environment 的文件