Windowsでもお手軽にdockerするならboot2dockerということで(Macもそうだけど)、開発環境整えるのにハマったポイントを書くという、ありふれたごくつまらない話です。
ホスト⇔ゲスト の共有ディレクトリのこと
boot2docker 初回起動 up すると、だいたい共有ディレクトリがWindowsなら/c/Users/
、Macなら/User/
がホスト⇔ゲストでマウントされるんですが、マウントしているということそのものを頭においておかないといけなかった。
ちなみにboot2docker-vmのルート直下に、/c/Users/
, /User/
があり、初回起動時にすでにあると思う。
boot2docker-vm内でホスト側とマウントしたディレクトリは権限が変えられない
これはそういうものだというしかないです(マウントしたら当たり前だとか言われそうだけど、知らなかった)。それはコンテナのマウントオプション(これは(ホスト=)ゲストのホストとの共有ディレクトリ=コンテナのマウント!)を指定してコンテナを起動したコンテナ内での権限も同様です。
$ docker run -d -p 80:80 \
-v /c/Users/yourname/projects/repo/html:/var/www/html \ # マウントオプションでホストとの共有ディレクトリを指定
--name apache darekano/apache
$ docker exec -it apache bash # コンテナの中に入る
root@7eaf997110d8:/# cd /var/www/html # くどいけど、コンテナの中のここはホスト=ゲストの共有ディレクトリ
root@7eaf997110d8:/var/www/html# ls -al
total 2
drwxrwxrwx 1 1000 staff 4096 Feb 1 13:29 .
drwxr-xr-x 4 root root 4096 Feb 1 13:28 ..
-rwxrwxrwx 1 1000 staff 5667 Nov 5 09:08 .htaccess
-rwxrwxrwx 1 1000 staff 2642 Nov 5 09:06 index.html # ownerがこのようになってる
root@7eaf997110d8:/var/www/html# chown -R www-data /var/www/html # としたところで
root@7eaf997110d8:/var/www/html# ls -al
drwxrwxrwx 1 1000 staff 4096 Feb 1 13:29 .
drwxr-xr-x 4 root root 4096 Feb 1 13:28 ..
-rwxrwxrwx 1 1000 staff 5667 Nov 5 09:08 .htaccess # 変わらない
なので、 boot2docker でホスト側で共有ディレクトリにしたところにdockerでマウントさせる時は、chown
, chmod
の類の権限は諦めましょう。(ということなのだろうか)
例えば、Dockerfile内に、
RUN chmod -R www-data /var/www/html
と書いてあったとしても結果的にはそうならない。docker logs にどう残るかまでは見てないんだけど。
docker run -v のマウントするディレクトリは存在してはいけない
さっきと同じのコピペです
$ docker run -d -p 80:80 \
-v /c/Users/yourname/projects/repo/html:/var/www/html \ # マウントオプションでホストとの共有ディレクトリを指定
--name apache darekano/apache
この時、/c/Users/yourname/projects/repo/html/ は存在してはいけない。これ、基本的なことなんだろうけど、小1時間それではまってたので。
本日は以上です。