Moby: не удается смонтировать файл хоста, используя относительный путь

Созданный на 7 июл. 2016  ·  3Комментарии  ·  Источник: moby/moby

ИНФОРМАЦИЯ ОБ ОШИБКЕ

Вывод 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

Вывод 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

Действия по воспроизведению проблемы:

  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

Опишите полученные результаты:

  1. Я получаю папку "/etc/config.json" в контейнере, а не файл
  2. docker: Ответ об ошибке от демона: create ./config.json: «./config.json» содержит недопустимые символы для имени локального тома, только «[a-zA-Z0-9][a-zA-Z0-9_. -]" разрешены.
  3. прошло, я получил файл в контейнере

Опишите ожидаемые результаты:
Я ожидал, что docker run будет поддерживать монтирование локального файла с использованием относительного пути.

связанная проблема: https://github.com/docker/docker/issues/22016

versio1.11

Самый полезный комментарий

Я собираюсь закрыть это, так как это работает, как задумано и задокументировано, даже если это немного сбивает с толку. Если вы считаете, что документацию следует улучшить, отправьте патч!

Вы можете сделать -v $PWD/../../path:/location , чтобы косвенно использовать относительный путь.

Все 3 Комментарий

@subchen Это в значительной степени указано в документации.

Контейнер-назначение всегда должен быть абсолютным путем, например /src/docs. Host-src может быть либо абсолютным путем, либо значением имени . Если вы укажете абсолютный путь для host-dir, Docker привязывается к указанному вами пути. Если вы укажете имя, Docker создаст именованный том с этим именем.

  1. docker видит это как имя тома и, таким образом, создает том, создает для него папку внутри и монтирует в нее том.
  2. docker _still_ видит это как имя тома, но / не допускается в имени тома, и поэтому он не работает
  3. работает как положено :angel:

Причина, по которой cli docker не использует относительный путь, заключается в том, что клиент Docker и демон Docker могут находиться на разных хостах. Таким образом, как следует обрабатывать относительный путь?

  • на стороне клиента? но тогда, демон не находится на том же хосте, может не иметь файла в этом месте, и даже если он есть, содержимое файла такое же?
  • на стороне демона? но относительно какого пути тогда? путь демона?

Я собираюсь закрыть это, так как это работает, как задумано и задокументировано, даже если это немного сбивает с толку. Если вы считаете, что документацию следует улучшить, отправьте патч!

Вы можете сделать -v $PWD/../../path:/location , чтобы косвенно использовать относительный путь.

@vdemeester @justincormack спасибо за ваши объяснения.

-v $PWD/../../path:/location может решить мою проблему.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги