web-dev-qa-db-fra.com

Ajoute un montage de liaison à Dockerfile exactement comme le volume

Je souhaite ajouter le montage de liaison au fichier docker, tout comme j'initialise un volume dans Dockefile. Y at-il un moyen pour cela? 

9
Mufeed

Un fichier Docker définit la manière dont une image est construite, et non pas son utilisation. Vous ne pouvez donc pas spécifier le montage lié dans un fichier Docker. Essayez d’utiliser docker-compose à la place. Un simple docker-compose.yml qui monte un répertoire pour vous ressemblerait à ceci:

version: '3.1'

services:
  mycontainer:
    image: myimage
    build: .
    volumes:
      - './path/on/docker/Host:/path/inside/container'  

Le build: . est facultatif si vous construisez l'image par un autre moyen, mais il est parfois pratique de tout faire en un.

Exécutez ceci avec docker-compose up -d

13
boyvinall

En plus de ce que les autres réponses disent:

Étant donné que les montages de liaisons fournissent un accès au système de fichiers de l'hôte, leur risque d'être incorporés dans une image constituerait un risque énorme pour la sécurité. Prenons une image qui est supposée être un serveur Web, mais en réalité, bind monte vos /etc/passwd et /etc/shadow et les envoie ensuite à un serveur distant.

Ou un système qui relie /lib/ld-linux.so à un montage, puis l’écrase, brisant ainsi tout votre système.

Pour ces raisons, vous ne pouvez pas incorporer un montage lié dans votre fichier Docker. De même, vous ne pouvez pas spécifier de mappages de ports d'hôtes, d'accès à des périphériques hôtes ou d'autres attributs similaires dans le fichier Docker.

5
larsks

La réponse simple est non.

Un principe de conception de base pour les images de menu fixe est la portabilité. Les montages de liaison sont des hôtes spécifiques car le dossier monté est défini sur la machine hôte. Cela est donc en contradiction avec l'exigence de portabilité pour les images Docker.

1
yamenk