Вы не можете; APT, как и большинство других менеджеров пакетов, использует блокировку, чтобы гарантировать выполнение одной операции управления пакетами в любой момент времени. Это делается для обеспечения согласованности :. Важно поддерживать состояние базы данных пакетов и состояния пакетов согласованными, и самый простой способ сделать это — гарантировать, что они никогда не подвергаются нескольким одновременным модификациям.
Замки всегда находятся в фиксированном месте (, иначе они не были бы такими полезными ), так что вы можете использовать их самостоятельно, чтобы поставить работу в очередь, используя что-то вродеlockf
:
lockf /var/lib/dpkg/lock apt-get update
будет ждать освобождения блокировки (, если необходимо ), прежде чем запускать apt-get update
.
Если вы знаете , когда и , где будут записаны изменения, вы можете просто использовать chown
для этих файлов впоследствии:
id -u
,id -g
)хоста (не -пользователя root )в контейнер Docker с аргументом --env
chown
(также внутри контейнера ), чтобы изменения выглядели так, как будто они были выполнены хост-пользователем Я не думаю, что это особенно элегантное решение, но можно создать фиктивного пользователя внутри контейнера, чей 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