Контейнеры podman, запущенные под snap-пакетом, не видны хостом podman.

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

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

Подробный анализ проблемы:

  1. Изоляция Snap: Snap-пакеты создают изолированную среду для каждого приложения. Это означает, что файлы и процессы, созданные внутри Snap, не могут быть видимы или доступны из-за пределов этой среды. Ваш Podman, запускаемый из терминала Visual Studio Code в Snap, взаимодействует с файловой системой, отделенной от основной системы.

  2. Каталоги хранения Podman: Как вы заметили, каталог с файлами Podman, такими как containers.lock и volatile-containers.json, находится в директории Snap: ~/snap/code/current/.local/share/containers/storage/overlay-containers/. Это подтверждает, что ваши контейнеры работают в изолированном окружении.

  3. Командная строка и процессы: Хотя процессы контейнера видны в ps aux, они связаны с недоступной из вашей основной системы средой Snap. Для взаимодействия с ними вам необходимо работать в контексте той же изолированной среды.

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

  1. Работа внутри Snap: Поскольку контейнеры доступны внутри Snap, вы можете продолжать использовать терминал в Visual Studio Code для управления ими. Это не идеальное решение для производительной работы, но в текущих условиях работает.

  2. Подключение к общей области: Если вы хотите, чтобы ваш основной Podman видел контейнеры Snap, необходимо настроить доступ к общим ресурсам файловой системы и сетевых пространств. К сожалению, Snap имеет строгую архитектуру безопасности, и это может требовать создания специальных профилей допустимых операций (интерфейсов Snap), что требует значительных усилий и администрирования.

  3. Установка из APT или других источников: Рассмотрите возможность установки Visual Studio Code и Podman из стандартных репозиториев apt или PPA. Таким образом, обе программы будут работать в одной области, и Podman сможет распознавать все запущенные контейнеры, что упростит управление.

  4. Использование других контейнерных решений: Если изоляция Snap продолжает подводить и ограничивать, вы также можете рассмотреть использование Dockers или других систем управления контейнерами, более интегрированных с вашими основными рабочими процессами.

Рекомендации:

Изоляция Snap может затруднить работу, где необходима интеграция инструментов. Постарайтесь рассмотреть возможность использования других методов установки и управляющих контейнерами программ, которые будут меньше конфликтовать с вашими инструментами разработки. Это позволит вам более гибко управлять контейнерами и улучшит вашу производительность.

Если у вас возникнут дополнительно вопросы или потребуется помощь, не стесняйтесь направлять запросы сообществу пользователей Ubuntu или команде разработчиков Podman и Snap для получения более детальных рекомендаций и примеров. Попробуйте экспериментировать с разными настройками и работающими пакетами, чтобы найти наиболее подходящее решение для ваших задач.

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

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