Как я могу использовать локальный файл в контейнере?

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

Файл слишком велик для копирования в контейнер. Было бы лучше, если бы программа, запущенная в контейнере, искала набор данных в локальном каталоге моего компьютера, но я не знаю, как это сделать.

Есть ли способ сделать эту ссылку с помощью команды docker? Или используя Dockerfile?

Ответ 1

Да, ты можешь это сделать. То, что вы описываете, является привязкой. См. Https://docs.docker.com/storage/bind-mounts/ для документации по этому вопросу.

Например, если я хочу смонтировать папку из моего домашнего каталога в /mnt/mydata в контейнере, я могу сделать:

docker run -v /Users/andy/mydata:/mnt/mydata myimage

Теперь /mnt/mydata внутри контейнера будет иметь доступ к /Users/andy/mydata на моем хосте.

Помните, что если вы используете Docker для Mac или Docker для Windows, на хосте есть определенные каталоги, которые разрешены по умолчанию:

Если вы используете Docker Machine на Mac или Windows, ваш демон Docker Engine имеет только ограниченный доступ к вашей файловой системе macOS или Windows. Docker Machine пытается автоматически предоставить общий доступ к вашему каталогу /Users (macOS) или C:\Users (Windows). Таким образом, вы можете монтировать файлы или каталоги в macOS, используя.

Обновление июля 2019 года:

Я обновил ссылку на документацию и назвал, чтобы быть правильным. Эти типы креплений называются "креплениями". Фрагмент о Docker для Mac или Windows больше не появляется в документации, но все равно должен применяться. Я не уверен, почему они удалили его (у моего Docker для Mac все еще есть явный список разрешенных путей монтирования на хосте).