Я пытаюсь «докеризировать» свой веб-браузер (браузер Zen) , потому что я считаю очень полезным иметь отдельные экземпляры, чтобы лучше различать и приватизировать назначение одного экземпляра.
Я установил docker с помощью sudo pacman -S docker и активировал его системный сервис. Я также добавил себя в группу пользователей, чтобы не использовать sudo при каждой команде.
Я сделал все, чтобы мой графический процессор NVIDIA работал, поэтому «--gpus all» работает правильно, а среда выполнения по умолчанию для Docker — «nvidia».
Я успешно настроил первый экземпляр веб-браузера, затем решил продолжить работу со всеми остальными, поэтому повторил шаги. ...но все закончилось не очень хорошо, у меня возникла странная ошибка, возможно, связанная с разрешениями.
Я создал файл под названием ' Dockerfile' в "/home/Containers/Browsers/TLXS/Zen Browser/" с инструкциями по созданию образа.
Код: Выделить всё
FROM archlinux:latest
# Install dependencies
RUN pacman -Syu --noconfirm && \
pacman -S --noconfirm \
libx11 libxrender libxtst gtk3 tar alsa-lib alsa-utils pipewire pipewire-alsa
# Set working directory to the mounted host directory
WORKDIR "/home/Containers/Browsers/TLXS/Zen Browser"
# Run the browser binary when the container starts
CMD ["./zen/zen-bin"]
Код: Выделить всё
docker run -it --gpus all --name tlxs_zen-browser -v "/home/Containers/Browsers/TLXS/Zen Browser:/home/Containers/Browsers/TLXS/Zen Browser:rw" -e NVIDIA_DRIVER_CAPABILITIES=all -e DISPLAY=$DISPLAY -e XDG_RUNTIME_DIR=/tmp -v /tmp/.X11-unix:/tmp/.X11-unix -v /run/user/1000/pipewire-0:/tmp/pipewire-0 tlxs_zen-browserКод: Выделить всё
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: exec: "./zen/zen-bin": stat ./zen/zen-bin: no such file or directory: unknown.На самом деле там есть файл '/zen/zen-bin', и это для меня странно, потому что я' Я уже делал это раньше, и это сработало! Это результат команды ls -l, по сути тот же результат, который я получаю, если запускаю ее в папке первого экземпляра, с теми же разрешениями применено к перечисленным файлам:
Код: Выделить всё
total 4
-rw-r--r-- 1 371 Dockerfile
drwxr-xr-x 1 912 zen
Почему там говорится, что файла «/zen/zen-bin» нет, если инструкции Dockerfile идентичны инструкциям в другой папке? Также файл '/zen/zen-bin' находится в той же позиции!
TL;DR
Идея:
Моя идея — воспроизвести что-то вроде Sandboxie- Ящики Plus (Sandboxie-Plus — это приложение среды песочницы для Windows, где вы получаете для каждого созданного вами ящика выделенная и изолированная папка, к которой вы можете получить доступ и просматривать ее файлы).
Я создал папку «Контейнеры» в моем каталоге «/home/», затем я создал в ней папку под названием «Браузер» — это будет «коробка», посвященная основному браузеру. экземпляр и папка «Браузеры», в которой я создам все различные «ящики» для других экземпляров браузера.
Поэтому в "/home/Containers/" есть поля "Браузер" и "TLXS", "BFTW", "GDSV" и т. д. (случайные имена из 4 символов). ) в *"/home/Containers/Browsers/".
/home/Containers/
--- Браузер
------ Браузер Zen
---Браузеры
------TLXS
---------Браузер Zen
------BFTW
---------Дзен-браузер
------GDSV
---------Дзен Браузер
Мне бы хотелось, чтобы все файлы приложения, которое я закрепляю, были доступны и полностью доступны прямо здесь, в этих папках моей файловой системы, но сейчас я не смог этого сделать. Они каким-то образом скрыты, когда я просматриваю файловую систему с помощью файлового менеджера.
Что я сделал и над чем работал:
- установить мою позицию в Терминале на "/home/Containers/Browser/Zen Browser"
создал файл Dockerfile в "/home/Containers/Browser/Zen Browser";
Код: Выделить всё
FROM archlinux:latest
# Install dependencies
RUN pacman -Syu --noconfirm && \
pacman -S --noconfirm \
libx11 libxrender libxtst gtk3 tar alsa-lib alsa-utils pipewire pipewire-alsa
# Set working directory to the mounted host directory
WORKDIR "/home/Containers/Browser/Zen Browser"
# Run the browser binary when the container starts
CMD ["./zen/zen-bin"]
- с помощью диспетчера файлов переместил архив Tarball «zen.linux-x86_64.tar.bz2» в "/home/Containers/ Browser/Zen Browser" и разархивировал его, получив его содержимое, папку под названием "zen" со всеми файлами, необходимыми для запуска веб-браузера;
- построил изображение «browser_zen-browser», выполнив
Код: Выделить всё
docker buildx build -t browser_zen-browser . - предоставлено докеру разрешение на доступ к серверу отображения X11 с помощью команды
Код: Выделить всё
xhost +local:docker - запустите контейнер (и назовите его) с помощью команды
Код: Выделить всё
docker run -it --gpus all --name browser_zen-browser -v "/home/Containers/Browser/Zen Browser:/home/Containers/Browser/Zen Browser:rw" -e NVIDIA_DRIVER_CAPABILITIES=all -e DISPLAY=$DISPLAY -e XDG_RUNTIME_DIR=/tmp -v /tmp/.X11-unix:/tmp/.X11-unix -v /run/user/1000/pipewire-0:/tmp/pipewire-0 browser_zen-browser
Код: Выделить всё
docker start browser_zen-browserВот в чем проблема!
Теперь мне нужно проделать те же шаги и создать другие «ящики» в »/home/Containers/Browsers/».
Я попробовал начать с одного, например, «TLXS», но после создания Dockerfile, извлечения содержимого Tarball и создания образа я не могу его запустить.
Я нахожусь по адресу "/home/Containers/Browsers/TLXS/Zen Browser", там есть два элемента: файл "Dockerfile" и папка " дзен'. Это вывод команды ls -l:
Код: Выделить всё
total 4
-rw-r--r-- 1 371 Dockerfile
drwxr-xr-x 1 912 zen
Тем не менее, если я запустил команду
Код: Выделить всё
docker run -it --gpus all --name tlxs_zen-browser -v "/home/Containers/Browsers/TLXS/Zen Browser:/home/Containers/Browsers/TLXS/Zen Browser:rw" -e NVIDIA_DRIVER_CAPABILITIES=all -e DISPLAY=$DISPLAY -e XDG_RUNTIME_DIR=/tmp -v /tmp/.X11-unix:/tmp/.X11-unix -v /run/user/1000/pipewire-0:/tmp/pipewire-0 tlxs_zen-browserКод: Выделить всё
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: exec: "./zen/zen-bin": stat ./zen/zen-bin: no such file or directory: unknown.Поэтому я думаю, что это проблема с докером, который по какой-то странной причине не может увидеть файл.
Подробнее здесь: https://stackoverflow.com/questions/793 ... arch-linux
Мобильная версия