0

作業プロセスで docker イメージを使用したい。たとえば、larryprice/sass を使用して SASS ファイルを CSS にコンパイルしたいとします。このイメージは非常に単純です。

FROM ruby:2.2 
RUN gem install sass 
WORKDIR /tmp 
ENTRYPOINT ["sass", "--watch", "/src"]

Windows 10、Docker 1.11、および VirtualBox 5.0.16 を使用しています。

論理ドライブ D - D:\Projects\Foo\Bar\web\sass にマップされた作業用 SSD に配置されたプロジェクト ファイル

したがって、私の問題は次のとおりです。ドライブ D からコンテナーにボリュームをアタッチする場合: ($PWD または MINGW スタイルのフルパス /D/Projects/Foo/Bar/web/sass) 例

cd /D/Projects/Foo/Bar/web
docker run --name sass -v $PWD/sass:/src --rm larryprice/sass

コンテナーは SASS ファイルを認識できません。

$ docker exec -i -t sass /bin/bash
root@541aabac9ceb:/tmp# ls -al /src/
total 4
drwxr-xr-x  2 root root   40 May  3 13:05 .
drwxr-xr-x 50 root root 4096 May  3 13:05 ..

しかし、システム ディスク (C:) からボリュームをマウントすると、すべて正常に動作します。

$ docker run --name sass -v ~/sass:/src --rm larryprice/sass
[Listen warning]:
  Listen will be polling for changes. Learn more at https://github.com/guard/listen#polling-fallback.
>>> Sass is watching for changes. Press Ctrl-C to stop.
>>> New template detected: ../src/test.sass
      write /src/test.css
      write /src/test.css.map

Windows で必要な場所からボリュームをマウントするにはどうすればよいですか? または、私の場合、何が間違っていますか?

psパスに先頭のスラッシュを追加しても機能しません:

docker run --name sass -v //d/Projects/Foo/Bar/web/sass:/src --rm larryprice/sass
4

1 に答える 1

1

わかった。最後に、自分の質問に対する説明と解決策を見つけました。このソリューションは、Windows と MacOS X の両方で機能します (どちらも VirtualBox を使用して Docker に処理させるため)。

問題の原因は次の 2 点です。

  1. デフォルトでは、VirtualBox VM はホスト ファイルシステムへのアクセスが制限されています ( proof )。私の場合、ドライブ C: の users フォルダーに VBox 共有フォルダー ( screen ) 経由でアクセスできます。これのおかげで、次のようなボリューム マッピングを使用できます: ~/sass:/src (またはフル パス: /c/users/dbykadorov/sass)。残念ながら、この構成では /c/users/ 以外のパスを使用することはできません。

この点の解決策: 必要なディレクトリを指す別の共有フォルダーを VM に追加します。新しい共有 d:/Projects ( screen ) を作成しました。VM を再起動します。

ここであなたのケースが完了することを願っています。しかし、私の場合、VirtualBox はシステムの起動時に新しい共有フォルダーをマウントしません。だから、私は2番目の問題を得ました:

  1. VirtualBox は、追加したばかりの追加の共有フォルダーをマウントしません。

追加の解決策:

共有フォルダを手動でマウントしてみましょう。利用可能な方法で VM にログインします。コンソールで:

# Create mount point directory
$ mkdir -p /d/Projects
# Mount shared folder
$ mount -t vboxsf d/Projects /d/Projects

よし、これでうまくいく!これで、任意のプロジェクトのディレクトリ (D:\Projects 内) をマウントできます!

しかし... VMを再起動すると、マウントポイントが消えます=(ここで、マウントポイントをより永続的にする必要があります。ここで説明されているように:

# Make a file bootlocal.sh
$ touch /var/lib/boot2docker/bootlocal.sh
# Edit it
$ vi /var/lib/boot2docker/bootlocal.sh
# Add follovin lines here:
#!/bin/sh
mkdir -p /d/Projects
mount -t vboxsf d/Projects /d/Projects
# Save the file and reboot VM

重要な注意: ボリュームの作成をより明確にするために、共有フォルダーをホストと同じパスにマウントすることをお勧めします。たとえば、E:\Foo\Bar\Baz (MINGW スタイルでは /e/Foo/Bar/Baz) からボリュームを作成する必要がある場合は、E:\Foo\Bar\Baz 用の新しい共有フォルダーを追加して、正確にマウントする必要があります。 Docker VM の /e/Foo/Bar/Baz に。

それがすべてです。

于 2016-05-04T13:24:15.870 に答える