Moby: impossible de monter un fichier hôte en utilisant un chemin relatif

Créé le 7 juil. 2016  ·  3Commentaires  ·  Source: moby/moby

INFORMATIONS SUR LE RAPPORT DE BUG

Sortie de docker version :

Client:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Wed Apr 27 00:34:20 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Wed Apr 27 00:34:20 2016
 OS/Arch:      linux/amd64

Sortie de docker info :

Containers: 1
 Running: 1
 Paused: 0
 Stopped: 0
Images: 21
Server Version: 1.11.1
Storage Driver: overlay
 Backing Filesystem: xfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: host bridge null
Kernel Version: 3.10.0-327.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.64 GiB
Name: centos-dev
ID: ACEV:LLBJ:NOYB:VEHF:V3FO:JY3A:5ETY:ETCU:WM3D:DBGZ:YF25:BUTY
Docker Root Dir: /var/lib/docker
Debug mode (client): false
Debug mode (server): false
Registry: https://index.docker.io/v1/
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

Étapes pour reproduire le problème :

  1. docker run --rm -it -v config.json:/etc/config.json centos:7 bash
  2. docker run --rm -it -v ./config.json:/etc/config.json centos:7 bash
  3. docker run --rm -it -v /root/config.json:/etc/config.json centos:7 bash

Décrivez les résultats que vous avez reçus :

  1. Je reçois un dossier "/etc/config.json" dans le conteneur, pas un fichier
  2. docker : réponse d'erreur du démon : créer ./config.json : "./config.json" inclut des caractères non valides pour un nom de volume local, uniquement "[a-zA-Z0-9][a-zA-Z0-9_. -]" sont autorisés.
  3. passé, j'ai un fichier dans le conteneur

Décrivez les résultats que vous attendiez :
Je m'attendais à ce que docker run en charge le montage d'un fichier local à l'aide d'un chemin relatif.

problème connexe : https://github.com/docker/docker/issues/22016

versio1.11

Commentaire le plus utile

Je vais fermer ceci car il fonctionne comme prévu et documenté, même si c'est un peu déroutant. Si vous pensez que la documentation doit être améliorée, veuillez soumettre un correctif !

Vous pouvez faire -v $PWD/../../path:/location pour utiliser indirectement un chemin relatif.

Tous les 3 commentaires

@subchen Ceci est à peu près indiqué dans la documentation

Le conteneur-dest doit toujours être un chemin absolu tel que /src/docs. Le host-src peut être soit un chemin absolu, soit une valeur de nom . Si vous fournissez un chemin absolu pour le répertoire hôte, Docker se monte sur le chemin que vous spécifiez. Si vous fournissez un nom, Docker crée un volume nommé par ce nom.

  1. docker voit cela comme un nom pour un volume, et donc, créez le volume, créez un dossier pour celui-ci à l'intérieur et montez le volume dedans.
  2. docker _still_ voit cela comme un nom pour un volume mais / n'est pas autorisé dans le nom d'un volume, et donc il échoue
  3. fonctionne comme prévu :ange:

La raison pour laquelle le docker cli ne prend pas de chemin relatif est que le client docker et le démon docker ne se trouvent peut-être pas sur le même hôte. Ainsi, comment le chemin relatif doit-il être géré ?

  • côté client ? mais alors, le démon n'étant pas sur le même hôte, peut ne pas avoir le fichier à cet endroit, et même si c'est le cas, le contenu du fichier est-il le même ?
  • côté démon ? mais par rapport à quel chemin alors ? chemin du démon ?

Je vais fermer ceci car il fonctionne comme prévu et documenté, même si c'est un peu déroutant. Si vous pensez que la documentation doit être améliorée, veuillez soumettre un correctif !

Vous pouvez faire -v $PWD/../../path:/location pour utiliser indirectement un chemin relatif.

@vdemeester @justincormack merci pour vos explications.

-v $PWD/../../path:/location peut résoudre mon problème.

Cette page vous a été utile?
0 / 5 - 0 notes