概要
localstack を Git から Clone してそのまま使おうとしたらエラーで起動できなかったので対策をメモします。対象はmacOS利用者の方になります。
※手っ取り早く知りたい人は一番下の解決策の項目を見てください。
環境
macOS Mojave 10.14.5
Docker version 18.09.2
対策
エラー内容
docker-composeから起動した時のエラーメッセージは下記の内容になります。
$ docker-compose up
Starting localstack_localstack_1 ... error
ERROR: for localstack_localstack_1 Cannot start service localstack: b'Mounts denied:
The path /var/folders/p2/fwlptfcs3h58cs3j4q21bkfm0000gn/T
is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.
.'
ERROR: for localstack Cannot start service localstack: b'Mounts denied:
The path /var/folders/p2/fwlptfcs3h58cs3j4q21bkfm0000gn/T
is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.
.'
ERROR: Encountered errors while bringing up the project.
※ エラーメッセージ中の \r\n は見やすいように改行にしています。
マウントできないエラーのようです。
Dockerアプリの設定から File Sharing を確認すると以下の画像の通りでした。
たしかに /var が入ってないし追加してあげようとしたら以下の画像の通り、エラーになります。
シンボリックリンクを疑ったが、やはりそうだった。 /var の本体は /private/var でした。
しかし、それなら大丈夫なはずだがなぜエラーになるのか...
docker-compose.yml の確認
version: '2.1'
services:
localstack:
image: atlassianlabs/localstack
ports:
- "4567-4582:4567-4582"
- "8080:8080"
environment:
- SERVICES=${SERVICES- }
- DEBUG=${DEBUG- }
- DATA_DIR=${DATA_DIR- }
- LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR- }
- KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
volumes のこの ${TMPDIR:-/tmp/localstack}:/tmp/localstack が怪しい。
調べてみるとやはりこれのせいだった。
一応、TMPDIRは下記のパスのとおりで/var配下だけどダメらしい。
$ echo $TMPDIR
/var/folders/p2/xxxx/T
docker run だとシンボリックリンクを解決してくれないのかもしれない。
そのため以下の方法で指定し、解決することとした。
解決策
$ TMPDIR=/private$TMPDIR docker-compose up
参考