Moby: 相対パスを使用してホストファイルをマウントできません

作成日 2016年07月07日  ·  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これはドキュメントにほとんど記載されています

container-destは、常に/ src / docsなどの絶対パスである必要があります。 host-srcは、絶対パスまたは名前値のいずれかです。 host-dirの絶対パスを指定すると、Dockerは指定したパスにバインドマウントします。 名前を指定すると、Dockerはその名前で名前付きボリュームを作成します。

  1. dockerはそれをボリュームの名前として認識し、ボリュームを作成し、その中にフォルダーを作成して、ボリュームをマウントします。
  2. docker _still_はボリュームの名前としてそれを確認しますが、ボリュームの名前で/は許可されていないため、失敗します
  3. 期待どおりに機能しています:angel:

docker cliが相対パスを使用しない理由は、DockerクライアントとDockerデーモンが同じホスト上にない可能性があるためです。 したがって、相対パスはどのように処理する必要がありますか?

  • クライアント側で? しかし、デーモンが同じホスト上にない場合、この場所にファイルがない可能性があります。ファイルがある場合でも、ファイルの内容は同じですか?
  • デーモン側? しかし、どのパスに関連して? デーモンのパス?

少し混乱しますが、意図したとおりに機能し、文書化されているため、これを閉じます。 ドキュメントを改善する必要があると思われる場合は、パッチを送信してください。

-v $PWD/../../path:/locationを実行して、相対パスを間接的に使用できます。

@ vdemeester @ justincormack説明してくれてありがとう。

-v $PWD/../../path:/locationで問題を解決できます。

このページは役に立ちましたか?
0 / 5 - 0 評価