LoginSignup
2
3

More than 5 years have passed since last update.

Virtual Box+Docker+Nginxで共有フォルダのファイルを配信する方法

Last updated at Posted at 2018-03-04

背景

Windowsの上にVirtual BoxでUbuntu Server 16.04を立てて、Docker-composeでNginxのコンテナを動かしていた。Ubuntuで作成したファイルをvolumvesでコンテナと共有して配信するのは何ら問題なくできます。しかし、windowsと共有フォルダで共有したファイルを配信しようとすると403 Forbiddenで配信できませんでした。
Nginxのログを見てみるとpermission deniedでファイルを読み取れていないようでした。Nginxのコンテナの中に入って権限を確認すると、 -rwxrwx---となっていました。rootとgroupには権限があるけれど、その他には権限がないようでした。

問題

Virtual Boxの共有フォルダで共有したファイルに対してdocker-composeのvolumeでNginxのコンテナと共有しても、permission deniedでNginxがアクセスできません。

/media/sf_sharedをwindowsとUbuntuの共有フォルダとして設定した場合

docker-compose.yaml
version: '2'
  services:
     nginx:
       image: nginx
       ports:
         - "80:80"
       volumes:
         - /media/sf_shared:/usr/share/nginx/html
        - ./nginx/conf.d:/etc/nginx/conf.d
        - ./nginx/nginx.conf:/etc/nginx/nginx.conf

対処法

Nginxの公式イメージではnginx.confの中のuserの設定がnginxになっているので、rootに変えることで、Nginxはワーカーがroot権限で動くので、ファイルを配信することができます。

nginx.conf
user  root; # デフォルトはnginx
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

あとがき

画像ファイル置き場からユーザが選択した内容に応じて、APサーバでbase64に変換して送るのではなく、静的ファイルとして配信しようとしてはまりました。Nginxのuser設定をrootにする以外でうまくいく方法はないか試しましたが、今のところうまくいく方法を見つけられていません。
もし、ご存知の方いらっしゃったら教えてください。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3