Самый простой способ обмена данными между контейнером Docker и хост-системой – использовать тома Docker (volume).

В этом руководстве мы рассмотрим пошаговые инструкции по обмену файлами между контейнером Docker и хост-системой с использованием томов Docker через командную строку на Linux.

В этом руководстве вы узнаете:

  • Как использовать тома для обмена данными между контейнером Docker и хостом

Рассмотрим следующий пример.

Во-первых, на хосте мы создаем каталог с одним файлом, которым мы хотели бы поделиться с контейнером:

# mkdir data1
# echo "Docker volume share" > data1/file1

Затем мы запустим контейнер и используем параметр -v для монтирования локального системного каталога данных хоста data1 в каталог контейнера /opt/data1.

Обратите внимание: если место назначения не существует, оно будет создано командой docker.

Кроме того, docker принимает только полный путь к каталогу локального хоста, и по этой причине нам нужен префикс каталога data1 с помощью переменной $PWD/environment, который возвращает полный путь к текущему рабочему каталогу:

# docker run -v $PWD/data1:/opt/data1 -it debian /bin/bash

Результатом вышеуказанной команды является то, что теперь мы можем получить доступ к нашему ранее созданному файлу file1 из контейнера:

# cat /opt/data1/file1 
Docker volume share

Это все, что нужно сделать.

Теперь вы можете обмениваться любыми файлами между хостом и контейнерами Docker, используя смонтированный том.

Если вы столкнулись с какими-либо посмотрите следующий раздел.

Заключение

В этом руководстве мы узнали, как обмениваться данными между хост-системой и контейнером Docker с помощью томов.

Это лучший и самый простой способ обмена данными между двумя системами Docker и Linux, требующий всего лишь нескольких коротких шагов.

Устранение неполадок

Если вы столкнулись со следующей ошибкой:

FATA[0000] Error response from daemon: cannot bind mount volume: data1 volume paths must be absolute.

Это означает, что вам необходимо указать полный путь как к исходному, так и к целевому каталогам.

Подсказка: полный путь всегда начинается с /.

Вы также можете столкнуться с этой ошибкой с правами:

# ls /opt/data1/ 
ls: cannot open directory /opt/data1/: Permission denied

Эта ошибка вызвана работой SElinux в вашей локальной хост-системе.

Следующие два решения помогут решить эту проблему.

Во-первых, решение – отключить SElinux в вашей локальной хост-системе.

# setenforce 0

Поскольку отключение SElinux может нарушить целостность вашей хост-системы, может быть проще вместо этого предоставить расширенные привилегии вашему контейнеру с помощью параметра docker –privileged = true:

# docker run --privileged=true -v $PWD/data1:/opt/data1 -it debian /bin/bash

 

Поделитесь статьей:

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