他所から持ってきたVagrant一式を動かすまで

はじめに

他所で遊んでいたVagrant一式を別の環境に持ってきて遊びたかっただけなんです。MongoDBで遊びたかっただけなんです。
持ってきたVagrantでCentOSを起動して、その中でDockerを使ってMongoDBを動かす。ただそれだけの単純な手順です。

でも物事はそううまくは進まない。
詰まった箇所をメモしておきます。

余談ですが、FF7のリメイク、めっちゃきれいですね。
ジェシーの「なんつって:p」がツボです。特にジェシーの宿舎前ではなくクラウドの下宿前バージョンの方です。あのギャップが良い。

UIDが競合する

まずVagrantでVMが起動しないとは思わなかった。

一度でもvagrant upしたら、そのときのUIDが記録されるようです。コピーするときにVagrantファイル(と、あれば設定ファイル的なもの)だけを持ってくれば問題ないはずです。ただ、隠しファイルを表示しない設定でWindows環境からファイルをまとめてMac環境に持ってきたりすると、余計なものまで紛れ込んでしまうことがあります。
そう御名答!UIDが記録されたファイルです。

Vagrantファイルと同じ階層からみて.vagrant/machines/default/virtualbox/creator_uidに居ます。

vagrant upをするとUIDが違うと言われるので、上記ファイルの中身をそのUIDに書き換えます。または、一旦vagrant destroyをしてVMを作り直します。

ちまちま書き換えるよりdestoryするのが良いと思います。起動時に時間がかかりますが、まっさらな状態からスタートするのでホスト(VagrantのVMを動かしているところ)の環境に合わせてVMを作ることができます。急がば回れです。

共有ディレクトリでアクセス拒否

続きまして、Docker起動でつまづく。

exception in initAndListen: IllegalOperation: Attempted to create a lock file on a read-only directory

なんだこれは?
docker-compose内でVolumesの項目にてホスト(Vagrantで起動したVM)のディレクトリをマウントしたのですが、そのディレクトリで権限周りのエラーが起こっているようです。

docker psでは起動しているように見えるのですが、1分も経たないうちにRestartループに入ります。(docker-compose.yamlにてrestartするようにしている場合)

起動できたよー なんつって:p
これはかわいくない。

マウントしたいディレクトリのパーミッションを777にしても怒られました。ディレクトリを作り直しても、別のディレクトリを指定しても怒られました。結局、名前付きVolumeを作ってそれを指定しました。

未確認ですが、ホスト側(Vagrantで起動したVM)とコンテナ(docker-compose)でUIDとGIDを一緒にすれば大丈夫なようです。この辺りのことについてはいまいち不案内なのであやふやですが、docker-composeのyamlファイルでその辺りを指定できるんでしょうか?

おまけ:MongoDBにつなげる手段が無い

DBサーバが起動しているものの、ホスト側(VagrantのVMを動かしているところ)からDBに接続する手段がなかった。

mongodbをbrewしようとすると「んなものねーよ」と言われます。

いつのころからかmongodbはOSSではなくなったそうですね?なので、brewできなかったと……

代わりにmongodb-communityを使うことにします。

brew tap mongodb/brew
brew install mongodb-community

それにしてもbashでMongoDBを操作したいだけなのに、その他諸々も入れる必要があるとは。スマートじゃない。Oracleでよく使うSQL*PlusのようなものがMongoDBにもあれば便利なんですけどね。探せば出てきそうですね。

まとめ

ようやくMongoDBに繋げられるようになりました。長かった……

普段は気難しいOracleばかりを相手にしているので、毛色の違うMongoDBはとても興味深いです。OSSではなくなったとかいう話が少し気がかりですが。

ちなみにMongoDBを視覚的に扱うには、MongoDBを立てるついでにmongo-expressも立ててみると幸せになれます。