J'essaie de créer un conteneur pour exécuter un programme. J'utilise une image pré-configurée et il me faut maintenant exécuter le programme. Cependant, il s’agit d’un programme d’apprentissage automatique et j’ai besoin d’un ensemble de données de mon ordinateur pour fonctionner.
Le fichier est trop volumineux pour être copié dans le conteneur. Il serait préférable que le programme exécuté dans le conteneur effectue une recherche dans l'ensemble de données situé dans un répertoire local de mon ordinateur, mais je ne sais pas comment procéder.
Est-il possible de faire cette référence avec une commande de docker? Ou en utilisant Dockerfile?
Oui, tu peux faire ça. Ce que vous décrivez est un montage lié. Voir https://docs.docker.com/storage/bind-mounts/ pour obtenir de la documentation sur le sujet.
Par exemple, si je veux monter un dossier de mon répertoire personnel dans /mnt/mydata
dans un conteneur, je peux faire:
docker run -v /Users/andy/mydata:/mnt/mydata myimage
Maintenant, /mnt/mydata
à l'intérieur du conteneur aura accès à /Users/andy/mydata
sur mon hôte.
N'oubliez pas que si vous utilisez Docker pour Mac ou Docker pour Windows, il existe des répertoires spécifiques sur l'hôte autorisés par défaut:
Si vous utilisez Docker Machine sur Mac ou Windows, votre démon Docker Engine n’a qu’un accès limité à votre système de fichiers macOS ou Windows. Docker Machine essaie de partager automatiquement votre répertoire/Users (macOS) ou C:\Users (Windows). Donc, vous pouvez monter des fichiers ou des répertoires sur macOS en utilisant.
Mise à jour de juillet 2019:
J'ai mis à jour le lien vers la documentation et le nom pour être correct. Ces types de montages sont appelés "montages de liaison". L'extrait de code relatif à Docker pour Mac ou Windows n'apparaît plus dans la documentation, mais il devrait quand même s'appliquer. Je ne sais pas pourquoi ils l'ont supprimé (mon Docker pour Mac contient toujours une liste explicite des chemins de montage autorisés sur l'hôte).