Skip to content

Контейнери та томи Docker

Файлову систему контейнера Docker можна переглядати в панелі, як будь-яку теку, і те саме стосується тома Docker. Виберіть Підключитися до Docker… у меню Мережа або клацніть фішку Docker на панелі дисків — рушій з’явиться в активній панелі.

Це плагін, і він постачається вимкненим. Увімкніть його в Налаштування ▸ Плагіни…. Він починає вимкненим, бо з’єднання з демоном Docker має на вашому Mac ті самі права, що й ви самі — див. До чого він має доступ нижче.

Що ви бачите

Верхній рівень — три теки:

  • Compose Projects — усі контейнери, запущені Docker Compose, згруповані за проєктом, а потім за службою. Служба з одним контейнером і є цим контейнером: my-stack/backend/etc — це /etc бекенда. Служба з кількома зберігає для них рівень, по теці на контейнер.
  • Standalone Containers — усе інше, запущене чи ні.
  • Volumes — кожен том Docker як самостійний диск.

Нижче ви вже у справжній файловій системі: F3 переглядає файл, F4 редагує його, F5 копіює в іншу панель, F7 створює теку. Інша панель може бути чим завгодно — локальною текою, архівом, кошиком S3.

Групування читається з міток, які Compose ставить на власні контейнери й томи, тож воно правильне навіть для стека, чий docker-compose.yml давно зник із цієї машини.

Томи перелічені окремо навмисно. Том переживає контейнер, що його створив, може використовуватися кількома контейнерами, і зазвичай саме в ньому лежать дані, заради яких ви прийшли. Том, який наразі нічим не змонтовано, усе одно доступний для перегляду.

Стовпці

Клацніть правою кнопкою на заголовку стовпця панелі, щоб додати власні стовпці провайдера:

  • Стан — ● running, ○ stopped, ◌ paused, ! restarting.
  • Доступ — RW, RO для кореневої ФС або монтування лише для читання, VOL для тома Docker, BIND для вашої теки, змонтованої в контейнер, TMP для tmpfs.
  • Образ, ID.
  • Монтування — біля каталогу, який насправді є монтуванням, що це: Volume: my-stack_db-data або шлях на хості за bind-монтуванням. Так ви знаходите, який том у Volumes містить дані контейнера.

Зупинені контейнери

Зупинені контейнери перелічуються, а їхні файлові системи можна читати й записувати. Файловий API Docker відповідає й для контейнера, який не запускався місяць, — саме тому це відчувається як диск, а не як перелік процесів.

Двом речам потрібен справді запущений контейнер: видаленню та перейменуванню. В API рушія Docker немає операції ні для того, ні для іншого — єдиний спосіб видалити чи перемістити файл усередині контейнера — це щось у ньому виконати, — тож у зупиненому контейнері обидві відхиляються, а не імітуються.

Чого очікувати

Запис потрапляє всередину від імені root, видалення виконується від власного користувача контейнера. Це влаштування Docker, а не рішення, ухвалене тут: копіювання файлу всередину використовує архівний API рушія, який пише як root; видалення чи перейменування виконує команду всередині контейнера, а вона працює під користувачем, заданим образом. Тому видалення може бути відхилено з у доступі відмовлено для файлу, який ви щойно змогли скопіювати всередину. Peach Commander не обходить це, виступаючи як root, — він повідомляє вам, що відповів контейнер.

Контейнер або монтування лише для читання відхиляє запис і повідомляє про це як про помилку прав, а не як про збій.

Читання символічного посилання читає те, на що воно вказує. Панель і далі показує його як посилання у стовпці Attr; F3 показує вміст цілі, а не порожній файл.

Корінь великого зупиненого контейнера може не піддаватися переліченню. У Docker немає виклику, який перелічує каталог. Прочитати каталог означає запросити його як архів, а той містить усе, що під ним: у зупиненого контейнера на повнорозмірному образі це можуть бути десятки гігабайтів, і тоді перелічення відхиляється замість того, щоб читати все. Глибші каталоги не зачеплено, як і запущений контейнер: каталог, завеликий для читання як архів, перелічує сам контейнер. Якщо вам потрібен лише архівний шлях, див. налаштування нижче.

Скопіювати назовні весь контейнер — означає скопіювати всю його файлову систему, включно з /proc і /dev. Копіюйте потрібний каталог, а не /.

До чого він має доступ

Плагін говорить із тим самим рушієм, до якого ви дісталися б із термінала: DOCKER_HOST, якщо ви його задали, інакше ваш поточний docker context, інакше звичайні сокети Docker Desktop, Colima, Rancher Desktop, Lima і Podman. Podman працює тому, що надає той самий API.

Доступ до демона Docker, як правило, означає вельми широкий доступ до машини, на якій він працює. Плагін має рівно ваші права й більшого не просить: він не зберігає облікових даних, ніколи не чіпає власних каталогів Docker на вашому диску й не виконує привілейованих дій від вашого імені.

Єдине, що він створює, — одноразовий контейнер, і лише щоб дістатися до тома, який не змонтовано жодним наявним контейнером, оскільки том видно тільки зсередини того, що його монтує. Він ніколи не запускається, позначений як такий, що належить Peach Commander, і видаляється, коли ви залишаєте диск.

Дії над контейнером або томом

Клацання правою кнопкою по контейнеру або тому пропонує у підменю Docker те, чого диск сам по собі сказати не може:

  • Inspect — усе, що рушій про нього знає, у вигляді відформатованого JSON, у вікні, яке можна гортати й з якого можна копіювати.
  • Show Logs — останні 500 рядків, які контейнер записав.
  • Show Mounts — кожне монтування, яке він несе, що це і чи можна в нього писати.
  • Copy ID — повний ідентифікатор контейнера або ім’я тома до буфера обміну. Повний ідентифікатор, а не дванадцять символів зі стовпця ID: він потрібен для вставляння у команду docker, а короткий ідентифікатор — це префікс, який може перестати бути однозначним.
  • Jump to Volume — на каталозі, який насправді є томом, перейти до цього тома у Volumes. Це друга половина стовпця «Монтування»: стовпець називає том, а це веде до нього.
  • Open Compose Project — перейти до проєкту, якому належить контейнер.
  • Start, Stop, Restart, Pause, Unpause — вони змінюють контейнер, а не читають його, тож спершу питають. Start — заразом і вихід із двох відмов вище: видалення та перейменування потребують запущеного контейнера.

Пункти з’являються лише всередині диска Docker; над власною текою їх немає зовсім.

Журнал — ще й файл. У корені кожного контейнера лежить docker-logs.txt — який не є файлом контейнера: його читання запитує журнал у рушія. F3 відкриває його у переглядачі, тож застосовні і пошук, і перехід до рядка, і вибір кодування — чого окреме вікно дати не може. Контейнер, який справді несе файл із таким іменем, показує свій, а у віртуальний нічого записати не можна.

Налаштування

Налаштування ▸ Налаштування ▸ Docker містять усе це. Ті самі значення лежать у невеликому файлі в ~/Library/Application Support/PeachCommander/Docker/docker.ini — його й редагують, коли машину готують сценарієм:

  • Endpoint — адреса, що використовується замість знайденої.
  • ExecFallback — 0 змушує плагін використовувати лише архівний API Docker: тоді він ніколи нічого не виконує всередині контейнера — ціною неможливості перелічити дуже великий каталог, видалити й перейменувати.
  • ProbeBudgetMB, MaxBudgetMB, MaxBudgetSeconds — скільки архіву каталогу варто прочитати, перш ніж перейти до запасного шляху або здатися.
  • HelperImage — образ, з якого робиться згаданий одноразовий контейнер (типово будь-який образ, уже наявний на машині).
  • ShowAnonymousVolumes — 0 приховує томи, яким Docker дав за ім’я довгий хеш, бо ніхто інший їх не назвав.

Немає в цій версії

Віддалених рушіїв через SSH або TLS, інтерактивної оболонки та образів як файлових систем лише для читання.