Добавьте/snap/bin к PATH, используемой systemd

Я установил Докера с помощью снимка при установке Сервера Ubuntu 18.10.

Если у меня есть systemd файл единицы, это ссылается docker команда, я получаю эту ошибку:

Executable "docker" not found in path "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Я не уверен, где это получает этот путь поиска. Это не соответствует тому, что найдено в/etc/environment.

Не изменяя файл единицы, может я глобально изменять путь поиска, используемый systemd для включения /snap/bin?


В системе Ubuntu 18.04, просто с помощью docker без полного пути привел к ошибке Executable path is not absolute. Я идеально хочу, чтобы тот же сервисный файл работал и с Докером снимка и с пакетами докера-ce Кв.

4
задан 27 February 2019 в 00:52

2 ответа

Согласно systemd документации, ее ПУТЬ установлен на компиляции (см. раздел "Command lines"):

Если команда не будет всем (абсолютным) путем, то она будет разрешена к полному пути с помощью фиксированного пути поиска determinted во время компиляции. Искавшие каталоги включают/usr/local/bin/,/usr/bin/,/bin/на системном использовании разделяет/usr/bin/и/bin/каталоги и их sbin/дубликаты в системах с помощью мусорного ведра разделения / и sbin/. Таким образом безопасно использовать просто исполняемое имя в случае исполняемых файлов, расположенных в любом из "стандартных" каталогов, и полный путь должен использоваться в других случаях. Используя полный путь рекомендуется избежать неоднозначности. Подсказка: этот путь поиска может быть запрошен с помощью поискового двоичного значения по умолчанию systemd-пути.

Команда для запросов пути на моей Ubuntu 18.04 была sudo systemd-path search-binaries (на Arch это было systemd-path search-binaries-default):

$ sudo systemd-path search-binaries
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Так, у Вас есть следующие опции:

Польза: Отредактируйте файл единицы так, чтобы он использовал полные пути. Принятие Вас имеет доступ к нему, это - безусловно лучшее решение. Это заставляет файл соответствовать спецификации, это позволяет Вам копировать его в другие машины, это даже заставляет предупреждающие сообщения замолчать.

Плохое: Перекомпилировать systemd из источника и изменения путь. Это является трудоемким, сложным и все вокруг плохой идеи, если Вы действительно не знаете то, что Вы делаете. Даже если Вы делаете, это походит на плохое решение. Вы не собираетесь быть способными перекомпилировать systemd каждый раз Вы устанавливаете новую машину.

Ужасное: Если Вы действительно не можете зафиксировать файл единицы, можно всегда создавать символьную ссылку в /usr/bin указывая docker

sudo ln -s /snap/bin/docker /usr/bin/docker
2
ответ дан 1 December 2019 в 09:59

Это - способ зафиксировать это.

Проверять значение пути переменной:

echo $PATH

Добавить/snap/bin

export PATH="$PATH:/snap/bin"

Если это не работает, существует файл, названный/etc/environment

1
ответ дан 1 December 2019 в 09:59

Другие вопросы по тегам:

Похожие вопросы: