Вопрос или проблема
Я пытаюсь обновить docker-compose, так как с текущей версией у меня возникает ошибка при запуске .yml файла. Вот моя текущая ситуация:
$ which docker
/usr/bin/docker
$ which docker compose
/usr/bin/docker-compose
$ ls -al | grep docker
-rwxr-xr-x 1 root root 13511128 Feb 28 09:02 docker
-rwxr-xr-x 1 root root 336 Dez 11 2015 docker-compose
-rwxr-xr-x 1 root root 11314960 Feb 28 09:01 docker-containerd
-rwxr-xr-x 1 root root 10464424 Feb 28 09:01 docker-containerd-ctr
-rwxr-xr-x 1 root root 1976648 Feb 28 09:01 docker-containerd-shim
-rwxr-xr-x 1 root root 39473368 Feb 28 09:03 dockerd
-rwxr-xr-x 1 root root 862296 Feb 28 09:01 docker-init
-rwxr-xr-x 1 root root 2573840 Feb 28 09:01 docker-proxy
-rwxr-xr-x 1 root root 8195464 Feb 28 09:01 docker-runc
При попытке обновить docker-compose с https://github.com/docker/compose/releases. Результат команды:
sudo curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose
выдает:
bash: /usr/bin/docker-compose: Permission denied
Я также использую sudo для этой команды. Почему так? спасибо
Причина проблемы в том, что sudo
будет выполняться только на части команды curl
, а не на части команды >
.
Вы можете заставить sudo
выполняться на обеих частях команды следующим образом:
sudo bash -c "curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose"
Простое решение может быть следующим:
-
Скачать файл
wget https://github.com/docker/compose/releases/download/1.11.2/docker-compose-
uname -s
–uname -m
-
использовать
sudo
для размещения его в правильном местеsudo mv docker-compose-`uname -s`-`uname -m` /usr/bin/docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose
вам нужен доступ sudo после >. Просто измените вашу команду следующим образом: используйте команду tee с | pipe.
sudo curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` |sudo tee /usr/bin/docker-compose
Ответ или решение
Если вы сталкиваетесь с ошибкой "Permission denied" при попытке обновить docker-compose
, проблема заключается в том, как вы используете sudo
. Команда sudo curl -L ... > /usr/bin/docker-compose
применяет привилегии sudo
только к части с curl
, в то время как операция перенаправления >
выполняется с правами вашего текущего пользователя. Это означает, что ваш пользователь не имеет прав на запись в файл /usr/bin/docker-compose
.
Для решения проблемы есть несколько подходов:
1. Использование команды bash -c
Вы можете заставить sudo
обработать всю команду целиком следующим образом:
sudo bash -c "curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m) > /usr/bin/docker-compose"
2. Использование wget
и перемещения файла
-
Скачайте файл локально:
wget https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)
-
Переместите файл в нужное место с правами суперпользователя:
sudo mv docker-compose-$(uname -s)-$(uname -m) /usr/bin/docker-compose
3. Использование команды tee
с pipe
Для того чтобы обновить docker-compose
, вы можете использовать команду tee
, которая позволит перенаправить вывод с использованием прав sudo
:
sudo curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m) | sudo tee /usr/bin/docker-compose > /dev/null
Завершение установки
После обновления не забудьте установить корректные права доступа для исполняемого файла:
sudo chmod +x /usr/bin/docker-compose
Заключение
Ваш выбор метода зависит от предпочитаемого вами подхода к управлению файлами и удобства командной строки. Важно убедиться, что у вас есть правильные права доступа, чтобы избежать проблем с разрешениями в будущем. Используйте команды с пониманием их функциональности, учитывайте безопасность и управляемость системы.