Dockerコンテナーにホストディレクトリをマウントする方法


618

ホストで行われた更新がDockerコンテナーに反映されるように、ホストディレクトリをDockerコンテナーにマウントしようとしています。

私はどこで間違ったことをしていますか?これが私がしたことです:

kishore$ cat Dockerfile

FROM ubuntu:trusty
RUN apt-get update
RUN apt-get -y install git curl vim
CMD ["/bin/bash"]
WORKDIR /test_container
VOLUME ["/test_container"]

kishore$ tree
.
├── Dockerfile
└── main_folder
    ├── tfile1.txt
    ├── tfile2.txt
    ├── tfile3.txt
    └── tfile4.txt

1 directory, 5 files kishore$ pwd /Users/kishore/tdock

kishore$ docker build --tag=k3_s3:latest .

Uploading context 7.168 kB
Uploading context
Step 0 : FROM ubuntu:trusty
 ---> 99ec81b80c55
Step 1 : RUN apt-get update
 ---> Using cache
 ---> 1c7282005040
Step 2 : RUN apt-get -y install git curl vim
 ---> Using cache
 ---> aed48634e300
Step 3 : CMD ["/bin/bash"]
 ---> Running in d081b576878d
 ---> 65db8df48595
Step 4 : WORKDIR /test_container
 ---> Running in 5b8d2ccd719d
 ---> 250369b30e1f
Step 5 : VOLUME ["/test_container"]
 ---> Running in 72ca332d9809
 ---> 163deb2b1bc5
Successfully built 163deb2b1bc5
Removing intermediate container b8bfcb071441
Removing intermediate container d081b576878d
Removing intermediate container 5b8d2ccd719d
Removing intermediate container 72ca332d9809

kishore$ docker run -d -v /Users/kishore/main_folder:/test_container k3_s3:latest c9f9a7e09c54ee1c2cc966f15c963b4af320b5203b8c46689033c1ab8872a0ea

kishore$ docker run -i -t k3_s3:latest /bin/bash

root@0f17e2313a46:/test_container# ls -al
total 8
drwx------  2 root root 4096 Apr 29 05:15 .
drwxr-xr-x 66 root root 4096 Apr 29 05:15 ..

root@0f17e2313a46:/test_container# exit exit

kishore$ docker -v
Docker version 0.9.1, build 867b2a9

  • boot2dockerのバージョンを確認する方法がわかりません

質問、直面する問題:

  1. main_folderをdockerコンテナー内にあるtest_containerフォルダーにリンクするにはどうすればよいですか?
  2. これを自動的に作る必要があります。実際にrun -d -vコマンドを使用せずにそれを行うにはどうすればよいですか?
  3. boot2dockerがクラッシュするとどうなりますか?Dockerfile以外のDockerファイルはどこに保存されますか?

2
参考までに、これはこのコメントの時点でdockerで修正されているようです。Macでboot2dockerを使用しています。-vオプションを使用すると、ローカルディレクトリがコンテナにマウントされます。
Marco

回答:


509

これを行うにはいくつかの方法があります。そのための最も簡単な方法は、ADD次のようにdockerfile コマンドを使用することです。

ADD . /path/inside/docker/container

ただし、dockerfileのビルド後にホスト上のこのディレクトリに加えられた変更は、コンテナには表示されません。これは、コンテナを構築するときに、Dockerがディレクトリをに圧縮して.tarそのコンテキストをアップロードするためですをコンテナーに永続的にするためです。

これを行う2番目の方法は、ボリュームをマウントするという方法です。ホストディレクトリは、実行しているマシンに応じて変更される可能性があるため、可能な限り移植性を高めるため、dockerfile内のdockerコンテナーディレクトリにホストディレクトリをマップすることはできません。ホストディレクトリをdockerコンテナーディレクトリにマップするには、次の-vようにdocker run を使用するときにフラグを使用する必要があります。

docker run -v /host/directory:/container/directory -other -options image_name command_to_run

私はこのように試しましたkishore $ docker -v / Users / kishore / main_folder:/ test_container Dockerバージョン0.9.1、ビルド867b2a9 kishore $ docker run -v / Users / kishore / main_folder:/ test_container使用方法:docker run [オプション]画像[コマンド] [ARG ...]新しいコンテナでコマンドを実行します-P、--publish-all = false:公開されたすべてのポートをホストインターフェースに公開します-a、--attach = []:stdin、stdoutまたはstderr。-c、--cpu-shares = 0:CPUシェア(相対ウェイト)
Kishore Vaishnav 2014年

2
両方追加できますか?と-vボリュームが同時にマウントされます。ホストマウントを指定しない場合、デフォルトのapp_dirを使用しますか?
alexzg 2014

@alexzg最初のものだけを優先させることはできないと思います。また、2番目のデフォルトのapp_dir ...ホストマウントについては明確ではありません。
Kishore Vaishnav 2014

35
これは、Mac OS Xでdocker-machineとVirtualBoxを使用して動作しました。試行錯誤で発見した警告の1つは、ホストディレクトリは相対パスではなく、絶対パスでなければならないということです。
jbustamovej 2017

25
ADD実際には「マウント」ではなく、ファイルをコンテナにコピーして、内部に保持します。
kev 2017年

200

この質問のユーザーはを使用していDocker version 0.9.1, build 867b2a9ました。Dockerバージョン> = 17.06について回答します。

必要なことは、ローカルディレクトリをコンテナーディレクトリ内で同期させることですbind。これは、ボリュームをtypeでマウントすることによって実現されます。これにより、ソース(システム)とターゲット(Dockerコンテナー)のディレクトリがバインドされます。Linuxでディレクトリをマウントするのとほとんど同じです。

Dockerのドキュメントよると、マウントする適切なコマンドはのmount代わりになりました-v。ここにそのドキュメントがあります:

  • --mount:カンマで区切られた複数のキーと値のペアで構成されます。キーと値の各ペアは、<key>=<value>タプルの形式を取ります。--mount構文はより冗長です-v--volumeが、キーの順序は重要ではありません、そしてフラグの値が理解しやすくなります。

  • typeできるマウント、のbindvolumeまたはtmpfsバインドを使用します)

  • sourceマウントの。バインドマウントの場合、これはDockerデーモンホスト上のファイルまたはディレクトリへのパスです。sourceまたはとして指定できますsrc

  • destinationファイルまたはディレクトリが、容器内にマウントされるパスにその値として取ります。指定することができdestinationdstまたはtarget

したがって、現在のディレクトリ(ソース)を/test_container(ターゲット)でマウントするには、次のように使用します。

    docker run -it --mount src="$(pwd)",target=/test_container,type=bind k3_s3

これらのマウントパラメータにスペースがある場合は、引用符で囲む必要があります。そうでないことがわかっている場合は、`pwd`代わりに使用します。

    docker run -it --mount src=`pwd`,target=/test_container,type=bind k3_s3

また、ファイルのアクセス許可を処理する必要があります。この記事を参照してください


2
私はそれがどれほど簡潔で、それが間違っていないかを気に入っているので、あなたの回答を賛成しましたが、stackoverflow.com
a / 51829247/901899

2
今のところ、マウントではなくボリュームを推奨しているように見えるので、この回答からドキュメントが更新されたと思います。何かにコミットする前に、それをやり通す価値があります。
Sipty

1
@Siptyは次を参照している可能性があります。「新しいDockerアプリケーションを開発している場合は、代わりに名前付きボリュームの使用を検討して
ください。DockerCLI

81

2つの連続したマウント:ここでの投稿の多くは2つのboot2dockerを使用している可能性があります。何も表示されない理由は、ホストではなくboot2dockerからディレクトリをマウントしているためです。

基本的に、2つの連続したマウントが必要です。

ホストからシステムにディレクトリをマウントする最初のもの

2番目は、新しいディレクトリをboot2dockerから次のようにコンテナにマウントします。

  • 1)ローカルシステムをマウントする boot2docker

    sudo mount -t vboxsf hostfolder /boot2dockerfolder
    
  • 2)boot2dockerLinuxコンテナーにファイルをマウントする

    docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
    

次に、ls中に入るcontainerfolderと、のコンテンツが表示されますhostfolder


1
ベストアンサー。私は、(Windowsで)それを追加する必要がhostfolderマウントするコマンドは、フォルダの共有名を参照のうえれます。net shareWindowsターミナル(cmd)内のコマンドで表示されるもの。そして、それをvirtualBox GUIで共有フォルダーとして追加する必要があります(私のロジックに従っている場合は同じ名前を使用します)。共有を省略した場合は機能しますが、権限の問題とパフォーマンスの更新に直面します。
カノスキル

mountコマンドは、/ boot2dockerfolderがあるホストをどのようにして知るのですか?
alfonsodev 2015

エラーが発生しました:mount: unknown filesystem type 'vboxsf'Ubuntuのゲストとホストを使用して
nnyby

「vboxsf」は、VirtualBox共有フォルダー「ファイルシステム」ドライバーです。VirtualBox拡張機能をインストールして、VMに構成する必要があります。boot2dockerイメージにはこれらをインストールしないでください。VirtualBoxには、VirtualBox Additions ISOイメージを仮想ボリュームとして「挿入」する「デバイス」機能があります。通常、mount / dev / cdrom / mntを使用してこれをマウントにマウントし、/ mntに移動してbash VBoxLinuxAdditionsを実行します。gcc、カーネル、またはその他の依存関係のインストールが必要な場合があります。
Andrew Wolfe

mount.vboxsf:次のエラーでマウントに失敗しました:そのようなファイルまたはディレクトリはありませんmount:/ boot2dockerfolderでのmymapfoldernameのマウントが失敗しました:そのようなファイルまたはディレクトリはありません
vee

71

cliから-vオプションを使用できます。この機能はDockerfileでは使用できません

docker run -t -i -v <host_dir>:<container_dir> ubuntu /bin/bash

ここで、host_dirは、マウントするホストからのディレクトリです。dockerが作成するコンテナが存在しない場合でも、コンテナのディレクトリを気にする必要はありません。

ホストマシンから(root特権の下で)host_dirを変更すると、コンテナから見えるようになり、逆も同様です。


6
ホストマウントオプションを説明するための、すてきでクリーンで的確な例です。これは、実際のディレクトリを使用することで改善できる可能性がdocker run -t -i -v /tmp:/tmp ubuntu /bin/bashあります。ホスト/tmpはコンテナにマウントされ/tmpます。これでtouch /tmp/hello-world、コンテナからファイルをホストに表示できます。
ステファンヘニングセン2017年

3
完璧に動作します。ただし、この方法でマウントすると、ディレクトリの所有者がルートとして設定され、コンテナがルートとして実行されることも想定されます。コンテナーが非ルートとして実行されている場合、どのようにしてdirを非ルートとしてマウントしますか?
2018

33

OS X boot2dockerまたはそれと類似したものでdockerを使用することは可能ですか?

私は同じ経験をしました-コマンドは正しいですが、とにかく何も(賢明な)コンテナーにマウントされていません。

結局のところDockerのドキュメントで既に説明されています。入力するとdocker run -v /var/logs/on/host:/var/logs/in/container .../var/logs/on/host実際にはboot2dockerMacではなくVMイメージからマッピングされます。

共有フォルダーをVM経由で実際のホスト(私の場合はMac)にパイプする必要があります。


1
ありがとう!これは、遠く離れた問題で私を助けました。OS X上で動作していない場合、それは持っているだろうとドッカー内部で実行Postgresは、VBoxのIPにないローカルホストを結合した
ピーターBecich

2
dockerドキュメントへのそのURLは無効になりました
digitaldavenyc '29

これまでで最高のジョークだ。彼らはほんの少しのヒントだったかもしれない。
user2834172 16

2
あなたのドキュメントリンク404である
ファクターミスティック

3
共有フォルダーをVM経由で実際のホストにパイプ処理する例を知りたいと思います。
Derek

28

[更新] 2017年6月〜現在 Docker for Macは、VirtualBoxをいじる必要のある、この煩わしい部分をすべて処理します。/privateプレフィックスを使用して、ローカルホスト上のすべてを基本的にマッピングできます。詳細はこちら[/更新]

現在のすべての回答はBoot2dockerについて語っています。これは現在docker-machineの代わりに廃止されているので、これはdocker-machineで機能します。

まず、sshでdocker-machine vmに移動し、マッピング先のフォルダーを作成します。

docker-machine ssh $MACHINE_NAME "sudo mkdir -p \"$VOL_DIR\""

次に、フォルダーをVirtualBoxと共有します。

WORKDIR=$(basename "$VOL_DIR")
vboxmanage sharedfolder add "$MACHINE_NAME" --name "$WORKDIR" --hostpath "$VOL_DIR" --transient

最後に、もう一度sshでdocker-machineにアクセスし、共有したフォルダーをマウントします。

docker-machine ssh $MACHINE_NAME "sudo mount -t vboxsf -o uid=\"$U\",gid=\"$G\" \"$WORKDIR\" \"$VOL_DIR\""

注:UIDとGIDについては、まだ取得されていない限り、基本的にどんな整数でも使用できます。

これは、OS X El Capitan上のdocker-machine 0.4.1およびdocker 1.8.3でテストされています。


1
+1。私の頭を叩いて数時間後、あなたの答えはうまくいきました。これはdocker-machineドキュメントの一部である必要があります。
Abhijit Sarkar、2015年

-vフラグを使用しないのはなぜですか?
igracia

1
@igracia -vフラグは、OS X(またはWindows)で期待するように機能しません。DockerはVMで実行されるため、参照-vされるフォルダーはルートOSではなくVM内のフォルダーを指します。この手法は、VMフォルダーをルートOSにマッピングする次のステップを実行します。
Patrick Gunderson、2016年

1
@PatrickGunderson私の場合(OS X)、フォルダーはVMではなくホストにあり、正常に動作します。Docker TollがVMにエクスポートし、そこからコンテナにエクスポートします。
2016年

1
前述のルールの1つの例外は、VMが/Usersdockerと共有するために自動的にマウントされることです。つまり、作業ファイルが入っている場合は、それで問題あり~/*ません。開発環境のセットアップが不足する/developmentか、何か以外の/Users問題が発生する場合は、docs.docker.com / engine / userguide / containers / dockervolumes
Patrick Gundersonが

27

物理マシンをクリーンに保つために、Dockerコンテナー内でSailsJSアプリを実行する実験を行っています。

次のコマンドを使用して、SailsJS / NodeJSアプリケーションを/ appの下にマウントします。

cd my_source_code_folder
docker run -it -p 1337:1337 -v $(pwd):/ app my_docker / image_with_nodejs_etc

5
Dockerfileでこれを行うにはどうすればよいですか?
orad

23
docker run -v /host/directory:/container/directory -t IMAGE-NAME /bin/bash

docker run -v /root/shareData:/home/shareData -t kylemanna/openvpn /bin/bash

私のシステムでは、nhjkからの回答を修正しました-t。フラグを追加すると、問題なく機能します。


ローカルFSからファイルを作成/更新して、Dockerコンテナー内の変更を確認できますか?
Avi Mehenwal

14

ホストがWindows 10の場合、スラッシュの代わりにバックスラッシュを使用します-

docker run -it -p 12001:80 -v c:\Users\C\Desktop\dockerStorage:/root/sketches

ホストドライブが共有されていることを確認します(この場合はC)。私の場合、上記のコマンドを実行した後、共有の許可を求めるプロンプトが表示されました。


13

Mac OS /Users/<name>/projects/で、コンテナーのルートにあるMacのフォルダーをマウントするには:

docker run -it -v /Users/<name>/projects/:/projects <container_name> bash

ls /projects


11

2015年7月の更新-boot2dockerが直接マウントをサポートするようになりました。-v /var/logs/on/host:/var/logs/in/containerダブルマウントせずに、Macプロンプトから直接使用できます


11

以下のためのWindows 10のユーザー、内部のマウントポイントを持つことが重要であるC:/Users/ディレクトリ。これを機能させるために何時間も試してみました。この投稿は役に立ちましたが、Windows 10のソリューションは受け入れられた回答に対するコメントであるため、最初は明らかではありませんでした。これは私がそれをした方法です:

docker run -it -p 12001:80 -v //c/Users/C/Desktop/dockerStorage:/root/sketches \
<your-image-here> /bin/bash

次に、それをテストするために、echo TEST > hostTest.txt画像内で行うことができます。この新しいファイルは、のローカルホストフォルダに表示されC:/Users/C/Desktop/dockerStorage/ます。


パス上のダブルスラッシュは、私にとってそれがうまくいった理由です。-v $(pwd):/var/xx最初に使用したので混乱しましたが、それは機能しましたが、結果として空のディレクトリができました。バブン経由でcygを実行しています。
kenchilada

/ c / data /を使用しているときにWindows 7で同じ問題が発生し、ホストディレクトリを/ c / Users / <user> /の下に移動すると解決しました。ありがとう。
user8675309

1
問題の解決に役立った投稿へのリンクはありますか?
PBo

11

同じ問題が発生しています。私のコマンドラインは次のようになりました:

docker run --rm -i --name $NAME -v `pwd`:/sources:z $NAME

問題は「pwd」にありました。だから私はそれを$(pwd)に変更しました:

docker run --rm -i --name $NAME -v $(pwd):/sources:z $NAME

1
何のzためですか?
hh

2
zオプションは、バインドマウントコンテンツが複数のコンテナー間で共有されることを示します。
Jason

10

Docker 18-CE以降では、を使用docker run -v /src/path:/container/pathしてホストフォルダーの双方向バインディングを行うことができます。

ただし、Windows 10 / WSLを使用していて、ホストとしてDocker-CE for Windowsを使用していて、WSLにdocker-ceクライアントツールを使用している場合、大きな問題があります。WSLは/ファイルシステム全体を認識しますが、Windowsホストはドライブのみを認識します。WSL内では、/ mnt / c / projectpathを使用できますが、docker run -v ${PWD}:/projectpathと、ホスト上で/ mntは何も意味しないため、/ projectpath /が空であることがわかります。

ただし、/ c / projectpathから作業していて、それdocker run -v ${PWD}:/projectpathを行った場合、コンテナ内で/ projectpathは/ c / projectpathをリアルタイムで反映します。ゲスト内に空のマウントが表示されること以外に、この問題を検出するためのエラーやその他の方法はありません。

また、Docker for Windows設定で「ドライブを共有する」ことも確認する必要があります。


Win10 / WSLおよびDocker-CE / docker-ceでこの問題が発生しています。/ projectpath /を空にします。「/ c / projectpathからの作業」とはどういう意味ですか?/ c /を/ mnt / cにリンクして実行し/c/projectpathたところ、エラーが発生しましたbind mount source path does not exist: /host_mnt/c/projectpath
スティーブンT.スナイダー

このリンクは私の問題を解決しました:support.divio.com/local-development/docker/… (Windows上のDockerはデフォルトで/ Users /からのマウントのみを許可します)
Steven T. Snyder

7

私は、任意のディレクトリは次のようにシステムディレクティブの下に敷設ことがわかりました/var/usr/etcは、コンテナの下にマウントできないことが。

ディレクティブはユーザーのスペース-vスイッチにある必要があり、ローカルディレクトリをコンテナーにマウントするようにdockerデーモンに指示します。次に例を示します。

docker run -t -d -v /{local}/{path}:/{container}/{path} --name {container_name} {imagename}

5

VirtualBox Guest Additionsと一緒
にboot2docker / boot2dockerに/ Usersをマウントする方法

https://medium.com/boot2docker-lightweight-linux-for-docker/boot2docker-together-with-virtualbox-guest-additions-da1e3ab2465c

tl; dr VirtualBox Guest Additions(リンクを参照)を使用して独自のカスタムboot2docker.isoを構築するか、http: //static.dockerfiles.io/boot2docker-v1.0.1-virtualbox-guest-additions-v4.3.12.isoをダウンロード して保存します〜/ .boot2docker / boot2docker.isoに。


私はそのisoを使用してみましたが、それでも同じ問題に遭遇しました...その投稿で概説されている指示を使用することで解決できましたが、基本的には共有フォルダーを強制する必要がありました。
Jaco Pretorius 14

私はisoを使用しましたが、「VBoxManage sharedfolder add ...」コマンドを呼び出す前にVirtual Box VMを停止しなかったので、つまずきました。ようやくすべてがうまくいきましたが、とても感謝しています。
Emile

注:-v argがboot2dockerで機能しない理由は、実際のホストではなく、boot2docker-vmへのマウントに関係しているようです。これが、Vboxmanage部分が機能するのを助けると思う理由です。
Emile

5

main_folderをdockerコンテナー内にあるtest_containerフォルダーにリンクするにはどうすればよいですか?

以下のコマンドは正しいです。ただし、Macでboot2dockerを使用している場合(将来のアップデートによって異なります)は、フォルダーが空になることがあります。これを修正するためのチュートリアルについては、マットの回答を参照してください。

docker run -d -v /Users/kishore/main_folder:/test_container k3_s3:latest

これを自動的に実行する必要があります。run-d -vコマンドを実際に使用せずに実行する方法。

これらのコマンドを実際に使用することから離れることはできません。これらのコマンドは、Dockerの動作に固有のものです。それらをシェルスクリプトに入れて、繰り返し書き出さないようにすることをお勧めします。

boot2dockerがクラッシュするとどうなりますか?Dockerファイルはどこに保存されますか?

-v argを使用してホストマシンを参照すると、ファイルはホスト上で安全になります。

「docker build -t myimage」を使用した場合 Dockerfileを使用すると、ファイルがイメージにベイク処理されます。

Dockerイメージはboot2docker-vmに保存されていると思います。VirtualBoxからvmを削除したときに画像が表示されなくなったときに、これがわかりました。(注、Virtualboxの仕組みがわからないので、画像がまだどこかに隠れている可能性がありますが、Dockerには表示されません)。


5

同じ問題があった。これはドッカーのドキュメントで見つかりました:

注:ホストディレクトリは、その性質上、ホストに依存しています。このため、Dockerfileからホストディレクトリをマウントすることはできません。構築されたイメージは移植可能であるため、VOLUME命令はhost-dirの受け渡しをサポートしていません。ホストディレクトリは、すべての潜在的なホストで利用できるわけではありません。

したがって、読み取り/書き込みホストディレクトリのマウントは、他の回答が正しく指摘しているよう-vに、docker runコマンドのパラメーターでのみ可能です。


ホストディレクトリとは正確には何ですか?
Nicolas S.Xu 2017

@ NicolasS.Xu実際のDockerホストマシン上の任意のパス。
J.スコットエルブレイン

5

以下は、Windowsパスの例です。

docker run -P -it --name organizr --mount src="/c/Users/MyUserName/AppData/Roaming/DockerConfigs/Organizr",dst=/config,type=bind organizrtools/organizr-v2:latest

余談ですが、この髪の毛を引っ張っている間、考え出すことに取り組み、パスを何度も何度も再入力AutoHotkeyする必要があるときに、Windowsスクリプトを「Docker Windows」形式のパスに変換する小さなスクリプトを作成することにしました。この方法では、マウントポイントとして使用するWindowsパスをクリップボードにコピーし、キーボードの「Appsキー」を押すだけで、Dockerが理解できるパス形式にフォーマットします。

例えば:

これをクリップボードにコピーします。

C:\Users\My PC\AppData\Roaming\DockerConfigs\Organizr

Apps Keyカーソルがコマンドライン上の必要な場所にあるときにwhileキーを押すと、これがそこに貼り付けられます。

"/c/Users/My PC/AppData/Roaming/DockerConfigs/Organizr"

時間を大幅に節約できます。ここでそれはそれが便利だと思うかもしれない他の人のためのものです。

; --------------------------------------------------------------------------------------------------------------
;
; Docker Utility: Convert a Windows Formatted Path to a Docker Formatter Path
;                   Useful for (example) when mounting Windows volumes via the command-line.
;
; By:       J. Scott Elblein
; Version:  1.0
; Date:     2/5/2019
;
; Usage:    Cut or Copy the Windows formatted path to the clipboard, press the AppsKey on your keyboard
;           (usually right next to the Windows Key), it'll format it into a 'docker path' and enter it
;           into the active window. Easy example usage would be to copy your intended volume path via
;           Explorer, place the cursor after the "-v" in your Docker command, press the Apps Key and
;           then it'll place the formatted path onto the line for you.
;
; TODO::    I may or may not add anything to this depending on needs. Some ideas are:
;           
;           - Add a tray menu with the ability to do some things, like just replace the unformatted path
;               on the clipboard with the formatted one rather than enter it automatically.
;           - Add 'smarter' handling so the it first confirms that the clipboard text is even a path in
;               the first place. (would need to be able to handle Win + Mac + Linux)
;           - Add command-line handling so the script doesn't need to always be in the tray, you could
;               just pass the Windows path to the script, have it format it, then paste and close.
;               Also, could have it just check for a path on the clipboard upon script startup, if found
;               do it's job, then exit the script.
;           - Add an 'all-in-one' action, to copy the selected Windows path, and then output the result.
;           - Whatever else comes to mind.
;
; --------------------------------------------------------------------------------------------------------------

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%

AppsKey::

    ; Create a new var, store the current clipboard contents (should be a Windows path)
    NewStr := Clipboard

    ; Rip out the first 2 chars (should be a drive letter and colon) & convert the letter to lowercase
    ; NOTE: I could probably replace the following 3 lines with a regexreplace, but atm I'm lazy and in a rush.
    tmpVar := SubStr(NewStr, 1, 2)
    StringLower, tmpVar, tmpVar

    ; Replace the uppercase drive letter and colon with the lowercase drive letter and colon
    NewStr := StrReplace(NewStr, SubStr(NewStr, 1, 2), tmpVar)

    ; Replace backslashes with forward slashes
    NewStr := StrReplace(NewStr,  "\", "/")

    ; Replace all colons with nothing
    NewStr := StrReplace(NewStr, ":", "")

    ; Remove the last char if it's a trailing forward slash
    NewStr :=  RegExReplace(NewStr, "/$")

    ; Append a leading forward slash if not already there
    if RegExMatch(NewStr, "^/") == 0
        NewStr :=  "/" . NewStr

    ; If there are any spaces in the path ... wrap in double quotes
    if RegExMatch(NewStr, " ") > 0
        NewStr :=  """" . NewStr . """"

    ; Send the result to the active window
    SendInput % NewStr 

4

Windows 10でこれを機能させるには、システムトレイからDocker設定ウィンドウを開き、[ 共有ドライブ]セクションに移動する必要がありました。

次に、の横のチェックボックスをオンにしましたC。Dockerは、私のユーザーフォルダーへの書き込み権限を取得するために、デスクトップの資格情報を要求しました。

次に、上記の例とその設定ページの例に従ってdockerコンテナーを実行し、コンテナーにアタッチし/dataました。

docker run -v c:/Users/<user.name>/Desktop/dockerStorage:/data -other -options

3

Windowsでは絶対パスを指定する必要があることに注意してください。

以下は私のために働きました。

docker run -t -i -v D:/projects/:/home/chankeypathak/work -p 8888:8888 jupyter/tensorflow-notebook /bin/bash

3

同じ問題がありましたが、C:\ Users \フォルダーをドッカーにマウントしようとして
いました。

 $ docker run -it --name <containername> -v /c/Users:/myVolData <imagename>

2

コンテナからホストディレクトリをマウントするのと同じ要件があり、ボリュームマウントコマンドを使用しました。しかし、テスト中に、それはコンテナ内にもファイルを作成していることに気付きましたが、いくつかの調査の後、それらは単なるシンボリックリンクであり、ホストマシンから使用される実際のファイルシステムであることがわかりました。


2

ポルテイナーでこれを行うこともできます Webアプリケーションで実行して、異なる視覚体験ます。

まず、Portainerイメージをプルします。

docker pull portainer/portainer

次に、Portainerのボリュームを作成します。

docker volume create portainer_data

また、Portainerコンテナを作成します。

docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

次のURLにあるブラウザーでWebアプリにアクセスできます: " http:// localhost:9000 "。最初のログイン時に、Portainer管理者の資格情報を設定するように求められます。

Webアプリで、次のメニューとボタンに従ってください:(コンテナー>コンテナーの追加> 塗りつぶしの設定 >コンテナーの展開)

Portainerで「マウント」ボリュームを作成するのに苦労し、コンテナのボリュームを作成するときに「バインド」をクリックする必要があることに気付きました。以下は、ホストにバインドされたマウントされたボリュームを使用したコンテナ作成で機能したボリュームバインド設定の図です。

ボリュームバインド設定

PS:私はDocker 19.035とPortainer 1.23.1を使用しています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.