как получить доступ к файловой системе моего локального компьютера из контейнера docker

#linux #docker #filesystems

#linux #docker #файловые системы

Вопрос:

Я хочу запустить следующий контейнер docker и получить к нему доступ с терминала:

 docker run -it docker:5000/builds/build-lnx64-centos7:latest /bin/bash
  

Проблема в том, что внутри терминала я не могу найти ни одного из файлов в моей файловой системе. Нет ~/Desktop и подобных каталогов.

Вопрос: как получить доступ к файловой системе моего локального компьютера из контейнера docker?

Ответ №1:

По умолчанию контейнеры не могут видеть файловую систему своего хоста.

Если вы хотите достичь этого, вам придется явно «монтировать» любые каталоги, которые вы хотите видеть, используя -v флаг, вот так:

 docker run -v ~/Desktop:/host-desktop -it docker:5000/builds/build-lnx64-centos7:latest /bin/bash
  

Если вы запустите эту команду, вы увидите содержимое вашего рабочего стола в файловой системе контейнера по адресу /host-desktop .

Вы действительно не хотели бы, чтобы ваш контейнер мог видеть всю файловую систему хоста. Это было бы опасно, особенно если у контейнера есть разрешение на запись. Вы всегда должны «монтировать» только те файлы / каталоги, к которым вы хотите, чтобы контейнер имел доступ.

По большей части, любой проект, над которым я работал, использующий docker, выполняет «монтирование тома», чтобы контейнер мог записывать файлы, а разработчик мог легко получить к ним доступ на хосте (например, тесты selenium, делающие скриншоты), или чтобы разработчик мог редактировать исходный код, и контейнер увидит обновление и горячую перезагрузку (например, разработка nodejs). При выполнении последнего (пример горячей перезагрузки) обычно целесообразно монтировать в режиме только для чтения.

Смотрите документы для получения более подробной информации:https://docs.docker.com/engine/reference/commandline/run/#mount-volume—v—read-only