あるディレクトリをS3バケットにマウントするため、Golangで書かれたライブラリgoofysを使うことに。
goofysを使うと、EC2のAmazon Linux上で極めて簡単にバケットをマウントできるんですが、Dockerコンテナ上でマウントしようとしたら少しハマったので備忘メモを残しておきます。
以下はDocker for Windows (Windows 10) で検証した内容です。
ハマった箇所
普通にgoofysコマンドでマウントしようとすると下記エラーが出現。
main.FATAL Unable to mount file system, see syslog for details
まずは指示の通り、syslogをみてみる。
/go/bin/goofys[6420]: main.FATAL Mounting file system: Mount: mount: running fusermount: exit status 1#012#012stderr:#012fusermount: fuse device not found, try 'modprobe fuse' first#012
この段階でfuse、goofysともに正常にインストールされているはず。なぜ…?
原因と解消法
解決策を検索してみるとgithubに見つけました。
どうやら原因はdockerコンテナ上でfuseのカーネルモジュールが読み込めていないためのようです。
docker-composeファイルに以下を付け足します。
devices:
- "/dev/fuse:/dev/fuse"
cap_add:
- SYS_ADMIN
これで再度マウントを試行してみます。
$ goofys [s3バケット名] [マウントポイント]
エラーなし。
syslogをみても、ちゃんとマウントできているようです。
main.INFO File system has been successfully mounted.