Вопрос или проблема
Я использую Ubuntu 24.04 и пытаюсь выполнить следующую команду:
docker buildx \
build --platform linux/arm64,linux/amd64 \
--tag data-cli \
--build-arg PYTHON_VERSION="$(cat cli/.python-version)" \
--file cli/Dockerfile .
Эта команда завершается с ошибкой
=> ERROR [linux/arm64 2/9] RUN sudo apt-get update && sudo apt-get install --yes --no-install-recommends awscli libc-dev gcc postgresql libpq-dev zip && sudo apt-get clean 0.2s
=> CANCELED [linux/amd64 2/9] RUN sudo apt-get update && sudo apt-get install --yes --no-install-recommends awscli libc-dev gcc postgresql libpq-dev zip && sudo apt-get clean 0.0s
------
> [linux/arm64 2/9] RUN sudo apt-get update && sudo apt-get install --yes --no-install-recommends awscli libc-dev gcc postgresql libpq-dev zip && sudo apt-get clean:
0.108 + sudo apt-get update
0.138 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?
------
WARNING: No output specified with docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
Из этого вопроса я понял, что проблема связана с файловой системой моего хоста.
Но когда я проверяю точку монтирования моего docker, я вижу /
(то же самое для /usr/bin
)
> docker info|grep "Docker Root"
Docker Root Dir: /var/lib/docker
> df /var/lib/docker
Файловая система 1K-блоки Использовано Доступно Использовано% Смонтировано на
/dev/mapper/ubuntu--vg-ubuntu--lv 980211368 38735352 891610288 5% /
> df /usr/bin
Файловая система 1K-блоки Использовано Доступно Использовано% Смонтировано на
/dev/mapper/ubuntu--vg-ubuntu--lv 980211368 38736072 891609568 5% /
Но /
не смонтирован с флагом no exec
> mount |grep 'on / '
/dev/mapper/ubuntu--vg-ubuntu--lv на / тип ext4 (rw,relatime)
Я не совсем понимаю, в чем проблема здесь
Ответ или решение
Docker ошибка "effective uid is not 0" на Ubuntu 24.04
Проблема, с которой вы столкнулись при попытке выполнения команды docker buildx
, гласит: "effective uid is not 0". Эта ошибка возникает, когда команда sudo
, использованная в вашем Dockerfile, не может выполнить необходимые действия из-за ограничений на файловую систему.
Причины возникновения проблемы
Ошибка "effective uid is not 0" указывает на то, что программа не может получить права суперпользователя. Это может быть связано с одной из следующих причин:
-
Файловая система с опцией ‘nosuid’: Если ваша файловая система, на которой находится
/usr/bin/sudo
, смонтирована с этой опцией, тоsudo
не может работать надлежащим образом. Это приводит к тому, что команды, требующие повышенных прав, не могут быть выполнены, так какsudo
не может действовать как суперпользователь. -
Использование сетевой файловой системы (NFS): Если ваша файловая система монтируется через NFS и не настроена для предоставления root-доступа, это также может привести к подобной ошибке.
Анализ текущей ситуации
Судя по выводам команд docker info
и df
, вы используете локальную файловую систему, и она не имеет опции nosuid
, поскольку вывод команды mount
показывает, что файловая система /
смонтирована как ext4
с параметрами rw,relatime
.
Это может указывать на то, что причина не в самом монтировании для вашего корневого каталога или /usr/bin
.
Возможные решения
-
Изменение Dockerfile: Вместо использования
sudo
в Dockerfile, старайтесь использовать команды, которые требуют прав суперпользователя, безsudo
. Например:RUN apt-get update && apt-get install --yes --no-install-recommends awscli libc-dev gcc postgresql libpq-dev zip && apt-get clean
Это позволит избежать необходимости использования
sudo
, что обеспечит успешное выполнение команды. -
Настройка окружения: Убедитесь, что ваше окружение настроено правильно, и, если вы используете Docker в контексте CI/CD или в специализированных контейнерах, проверьте, что настройки Docker не требуют использования
sudo
для выполнения команд, которые должны выполняться от имени суперпользователя. -
Тестирование в другом окружении: Если проблема сохраняется, попробуйте протестировать выполнение вашей команды на другой версии Ubuntu или другой системе, чтобы определить, является ли это проблемой специфической для вашей установки.
-
Проверка конфигурации Docker: Иногда конфигурационные файлы Docker могут вызвать подобные проблемы, если они были неправильно настроены. Проверьте файл
/etc/docker/daemon.json
на предмет неучтенных параметров или дополнительных настроек, которые могли быть изменены. -
Перезапуск Docker: Перезагрузите демон Docker для применения возможных изменений в конфигурации и проверьте, сохраняется ли проблема.
В итоге, ваша ошибка "effective uid is not 0" в Docker связана, скорее всего, с использованием sudo
в Dockerfile. Измените команды, чтобы они работали без sudo
, и это поможет устранить проблему.