Внесение изменений в подключенный том из контейнера Docker выглядит так, как если бы они выполнялись обычным пользователем, сохраняя при этом привилегии root.

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

Замки всегда находятся в фиксированном месте (, иначе они не были бы такими полезными ), так что вы можете использовать их самостоятельно, чтобы поставить работу в очередь, используя что-то вродеlockf:

lockf /var/lib/dpkg/lock apt-get update

будет ждать освобождения блокировки (, если необходимо ), прежде чем запускать apt-get update.

0
19.11.2019, 21:21
2 ответа

Если вы знаете , когда и , где будут записаны изменения, вы можете просто использовать chownдля этих файлов впоследствии:

  • Передать идентификатор пользователя и группы (id -u,id -g)хоста (не -пользователя root )в контейнер Docker с аргументом --env
  • Запустите свои команды/скрипт (внутри контейнера )от имени пользователя root
  • Наконец, запуститеchown(также внутри контейнера ), чтобы изменения выглядели так, как будто они были выполнены хост-пользователем
0
28.01.2020, 03:06

Я не думаю, что это особенно элегантное решение, но можно создать фиктивного пользователя внутри контейнера, чей ID пользователя и группы совпадают с идентификаторами (не -не корневого )хост-пользователя:

  • Передать идентификатор пользователя и группы (id -u,id -g)хоста (не -пользователя root )в контейнер Docker с аргументом --env
  • Создать новую группу, соответствующую идентификатору группы хоста (не -корневого )пользователя

    addgroup --gid $DUMMY_GID dummy
    
  • Создать нового пользователя, соответствующего идентификатору пользователя хоста (не -root )пользователя

    adduser --uid $DUMMY_UID --gid $DUMMY_GID --disabled-password --gecos "" dummy
    
  • Команды, требующие привилегий суперпользователя, будут работать

  • Запустите другие команды/скрипт с помощьюrunuser

    runuser -u dummy -- command
    
0
28.01.2020, 03:06

Теги

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