Moby: não pode montar um arquivo host usando o caminho relativo

Criado em 7 jul. 2016  ·  3Comentários  ·  Fonte: moby/moby

INFORMAÇÕES DO RELATÓRIO DE ERROS

Saída 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

Saída 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

Etapas para reproduzir o problema:

  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

Descreva os resultados que você recebeu:

  1. Recebo uma pasta "/etc/config.json" no contêiner, não um arquivo
  2. docker: Resposta de erro do daemon: create ./config.json: "./config.json" inclui caracteres inválidos para um nome de volume local, apenas "[a-zA-Z0-9][a-zA-Z0-9_. -]" são autorizadas.
  3. passou, eu tenho um arquivo em container

Descreva os resultados esperados:
Eu esperava que docker run suportasse montar um arquivo local usando um caminho relativo.

problema relacionado: https://github.com/docker/docker/issues/22016

versio1.11

Comentários muito úteis

Vou fechar isso, pois está funcionando como pretendido e documentado, mesmo que seja um pouco confuso. Se você acha que a documentação deve ser melhorada, envie um patch!

Você pode fazer -v $PWD/../../path:/location para usar um caminho relativo indiretamente.

Todos 3 comentários

@subchen Isso é praticamente declarado na documentação

O container-dest deve sempre ser um caminho absoluto como /src/docs. O host-src pode ser um caminho absoluto ou um valor de nome . Se você fornecer um caminho absoluto para o diretório do host, o Docker será montado no caminho especificado. Se você fornecer um nome, o Docker criará um volume nomeado com esse nome.

  1. docker veja isso como um nome para um volume e, assim, crie o volume, crie uma pasta para ele dentro e monte o volume nele.
  2. docker _still_ veja isso como um nome para um volume, mas / não é permitido no nome de um volume e, portanto, falha
  3. funcionando como esperado :angel:

O motivo pelo qual o docker cli não usa o caminho relativo é porque o cliente do docker e o daemon do docker podem não estar no mesmo host. Assim, como o caminho relativo deve ser tratado?

  • do lado do cliente? mas então, o daemon não estar no mesmo host, pode não ter o arquivo neste local e, mesmo que tenha, o conteúdo do arquivo é o mesmo?
  • no lado daemon? mas em relação a que caminho então? caminho do daemon?

Vou fechar isso, pois está funcionando como pretendido e documentado, mesmo que seja um pouco confuso. Se você acha que a documentação deve ser melhorada, envie um patch!

Você pode fazer -v $PWD/../../path:/location para usar um caminho relativo indiretamente.

@vdemeester @justincormack obrigado pela sua explicação.

-v $PWD/../../path:/location pode resolver meu problema.

Esta página foi útil?
0 / 5 - 0 avaliações