問題
- ローカルのmacでdocker-composeした結果と、CodeBuildでdocker-composeした結果が異なってなんでだろうってなった
- CodeBuildの方でそんなファイルねーよってエラーが出てた
原因
- docker-compose の
volumes
はホストOSのファイルシステムを利用してファイルへアクセスする - macは大文字・小文字を区別しないが、CodeBuild(Ubuntu)は区別する
- ファイル名指定で大文字小文字が誤っており、CodeBuildの方ではファイルが存在しないと言われる
テストしてみた
準備
ローカルに Test.txt
というファイルを配置。volumesでコンテナに見せる。
docker-compose.yml
version: '3' services: app: image: alpine:latest tty: true volumes: - ".:/app"
起動
# docker-compose up -d
macで実行してみた結果
≻ uname -a Darwin hogehoge.local 17.7.0 Darwin Kernel Version 17.7.0: Thu Dec 20 21:47:19 PST 2018; root:xnu-4570.71.22~1/RELEASE_X86_64 x86_64 ≻ docker-compose exec app /bin/sh -c "cat /app/Test.txt" test ≻ docker-compose exec app /bin/sh -c "cat /app/test.txt" test
ubuntuで実行してみた結果
# uname -a Linux ip-XX-XX-XX-XX 4.15.0-1032-aws #34-Ubuntu SMP Thu Jan 17 15:18:09 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux # docker-compose exec app /bin/sh -c "cat /app/Test.txt" test # docker-compose exec app /bin/sh -c "cat /app/test.txt" cat: can't open '/app/test.txt': No such file or directory
感想
とてもハマりましたが、Dockerって最終的にホストOSのシステムコール使ってるんだなと実感しました(今回はdocker-composeが原因だったけど)。