Docker выдает ошибку “effective uid is not 0” на Ubuntu.

Вопрос или проблема

Я использую 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" указывает на то, что программа не может получить права суперпользователя. Это может быть связано с одной из следующих причин:

  1. Файловая система с опцией ‘nosuid’: Если ваша файловая система, на которой находится /usr/bin/sudo, смонтирована с этой опцией, то sudo не может работать надлежащим образом. Это приводит к тому, что команды, требующие повышенных прав, не могут быть выполнены, так как sudo не может действовать как суперпользователь.

  2. Использование сетевой файловой системы (NFS): Если ваша файловая система монтируется через NFS и не настроена для предоставления root-доступа, это также может привести к подобной ошибке.

Анализ текущей ситуации

Судя по выводам команд docker info и df, вы используете локальную файловую систему, и она не имеет опции nosuid, поскольку вывод команды mount показывает, что файловая система / смонтирована как ext4 с параметрами rw,relatime.

Это может указывать на то, что причина не в самом монтировании для вашего корневого каталога или /usr/bin.

Возможные решения

  1. Изменение 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, что обеспечит успешное выполнение команды.

  2. Настройка окружения: Убедитесь, что ваше окружение настроено правильно, и, если вы используете Docker в контексте CI/CD или в специализированных контейнерах, проверьте, что настройки Docker не требуют использования sudo для выполнения команд, которые должны выполняться от имени суперпользователя.

  3. Тестирование в другом окружении: Если проблема сохраняется, попробуйте протестировать выполнение вашей команды на другой версии Ubuntu или другой системе, чтобы определить, является ли это проблемой специфической для вашей установки.

  4. Проверка конфигурации Docker: Иногда конфигурационные файлы Docker могут вызвать подобные проблемы, если они были неправильно настроены. Проверьте файл /etc/docker/daemon.json на предмет неучтенных параметров или дополнительных настроек, которые могли быть изменены.

  5. Перезапуск Docker: Перезагрузите демон Docker для применения возможных изменений в конфигурации и проверьте, сохраняется ли проблема.

В итоге, ваша ошибка "effective uid is not 0" в Docker связана, скорее всего, с использованием sudo в Dockerfile. Измените команды, чтобы они работали без sudo, и это поможет устранить проблему.

Оцените материал
Добавить комментарий

Капча загружается...