Вопрос или проблема
Я использую Visual Studio Code на Ubuntu, установленный как пакет Snap. Когда я открываю терминал в Visual Studio Code и использую его для запуска контейнера podman – все работает хорошо, кроме того, что если я запускаю podman на локальном терминале, он не видит ничего работающего:
$ $ podman ps -aq | wc -l
0
Я вижу процессы, работающие в команде ps, с моим идентификатором пользователя:
$ ps auxfw
...
odeda 39121 0.0 0.0 12216 2724 ? Ss 10:16 0:00 \_ /usr/bin/conmon --api-version 1 -c 7cd9293c0ed384bbebda322d366cefa2890502be3ca
odeda 39123 0.0 0.0 11444 6720 pts/0 Ss+ 10:16 0:00 | \_ nginx: master process nginx -g daemon off;
100100 39156 0.0 0.0 11912 3204 pts/0 S+ 10:16 0:00 | \_ nginx: worker process
100100 39157 0.0 0.0 11912 2884 pts/0 S+ 10:16 0:00 | \_ nginx: worker process
...
И я вижу файлы хранения для podman в дереве Snap:
ls -la ~/snap/code/current/.local/share/containers/storage/overlay-containers/
total 8
drwx------ 1 odeda odeda 206 Dec 27 10:16 .
drwx------ 1 odeda odeda 236 Dec 27 10:36 ..
drwx------ 1 odeda odeda 16 Dec 27 10:16 7cd9293c0ed384bbebda322d366cefa2890502be3caa60854207968a31d4bf08
-rw-r--r-- 1 odeda odeda 64 Dec 27 10:16 containers.lock
-rw------- 1 odeda odeda 533 Dec 27 10:16 volatile-containers.json
Я хочу работать с запускаемым контейнером, используя podman exec
и тому подобное – но podman на хосте не видит контейнер:
$ podman exec -ti somecontainer /bin/bash
Error: no container with name or ID "somecontainer" found: no such container
Я могу запускать такие вещи хорошо из терминального окна Visual Studio Code – но так как оно в остальном довольно неудобное для серьезной работы в терминале, я бы предпочел не использовать его.
Я предполагаю, что это артефакт изоляции Snap. Как мне заставить podman на хосте видеть podman внутри изоляции Snap?
Ответ или решение
Когда вы запускаете контейнеры с использованием Podman внутри Visual Studio Code, установленного как пакет Snap, и не видите их на хосте, это может быть связано с особенностями конфайнмента Snap. Snap пакеты работают в изолированной среде, что часто ограничивает доступ к файловой системе и другим ресурсам хоста.
Подробный анализ проблемы:
-
Изоляция Snap: Snap-пакеты создают изолированную среду для каждого приложения. Это означает, что файлы и процессы, созданные внутри Snap, не могут быть видимы или доступны из-за пределов этой среды. Ваш Podman, запускаемый из терминала Visual Studio Code в Snap, взаимодействует с файловой системой, отделенной от основной системы.
-
Каталоги хранения Podman: Как вы заметили, каталог с файлами Podman, такими как
containers.lock
иvolatile-containers.json
, находится в директории Snap:~/snap/code/current/.local/share/containers/storage/overlay-containers/
. Это подтверждает, что ваши контейнеры работают в изолированном окружении. -
Командная строка и процессы: Хотя процессы контейнера видны в
ps aux
, они связаны с недоступной из вашей основной системы средой Snap. Для взаимодействия с ними вам необходимо работать в контексте той же изолированной среды.
Возможные решения:
-
Работа внутри Snap: Поскольку контейнеры доступны внутри Snap, вы можете продолжать использовать терминал в Visual Studio Code для управления ими. Это не идеальное решение для производительной работы, но в текущих условиях работает.
-
Подключение к общей области: Если вы хотите, чтобы ваш основной Podman видел контейнеры Snap, необходимо настроить доступ к общим ресурсам файловой системы и сетевых пространств. К сожалению, Snap имеет строгую архитектуру безопасности, и это может требовать создания специальных профилей допустимых операций (интерфейсов Snap), что требует значительных усилий и администрирования.
-
Установка из APT или других источников: Рассмотрите возможность установки Visual Studio Code и Podman из стандартных репозиториев apt или PPA. Таким образом, обе программы будут работать в одной области, и Podman сможет распознавать все запущенные контейнеры, что упростит управление.
-
Использование других контейнерных решений: Если изоляция Snap продолжает подводить и ограничивать, вы также можете рассмотреть использование Dockers или других систем управления контейнерами, более интегрированных с вашими основными рабочими процессами.
Рекомендации:
Изоляция Snap может затруднить работу, где необходима интеграция инструментов. Постарайтесь рассмотреть возможность использования других методов установки и управляющих контейнерами программ, которые будут меньше конфликтовать с вашими инструментами разработки. Это позволит вам более гибко управлять контейнерами и улучшит вашу производительность.
Если у вас возникнут дополнительно вопросы или потребуется помощь, не стесняйтесь направлять запросы сообществу пользователей Ubuntu или команде разработчиков Podman и Snap для получения более детальных рекомендаций и примеров. Попробуйте экспериментировать с разными настройками и работающими пакетами, чтобы найти наиболее подходящее решение для ваших задач.