前提・実現したいこと
dockerを活用してappコンテナとdbコンテナおよびredisコンテナを立ち上げています。内容は割と基本的なものです。
下記のようにdocker-composeファイルを作成し、docker-compose up -dコマンドを実施すると問題なくコンテナが立ち上がります。
しかし、hoge_webコンテナにdocker exec -it hoge_web bashで入り、コンテナ内でbundle exec rails cなどとbundle execコマンドを実行すると下記の「エラーメッセージ」に記載のメッセージが表示されます。
これは何故でしょうか。どう対処すればよいのでしょうか。どなたかヒントでも構いませんのでご教示頂けますと幸いです!!
エラーメッセージ
ruby
1There was an error accessing `/app/hoge_web/.bundle/config`. 2The underlying system error is Errno::EISDIR: Is a directory @ io_fread - /app/hoge_web/.bundle/config
該当のソースコード
./docker-compose.yml
ruby
1version: '3' 2 3services: 4 app: 5 build: 6 context: ./ 7 dockerfile: Dockerfile.app 8 tty: true 9 stdin_open: true 10 container_name: hoge_web 11 environment: 12 RAILS_ENV: development 13 BUNDLE_PATH: /app/hoge_web/vendor/bundle 14 BUNDLE_APP_CONFIG: /app/hoge_web/.bundle/config 15 REDIS_HOST: redis 16 volumes: 17 - ./hoge_web:/app/hoge_web:rw 18 - ./start_app.sh:/usr/local/bin/start_app.sh:ro 19 ports: 20 - 3000:3000 21 working_dir: /app/hoge_web 22 command: bash /usr/local/bin/start_app.sh 23 links: 24 - redis 25 26 db: 27 image: mariadb:latest 28 container_name: hoge_db 29 ports: 30 - 3306:3306 31 environment: 32 MYSQL_DATABASE: hoge_web_development 33 MYSQL_ROOT_USER: root 34 MYSQL_ROOT_PASSWORD: password 35 MYSQL_USER: hoge 36 MYSQL_PASSWORD: password 37 38 redis: 39 image: "redis:latest" 40 container_name: hoge_redis 41 ports: 42 - 6379:6379
./.binlde/config/config
ruby
1--- 2BUNDLE_PATH: "./vendor/bundle"
./Dockerfile
ruby
1FROM ruby:2.5.1 2RUN apt update 3RUN apt -y install nodejs 4RUN apt -y install vim 5RUN apt -y install mysql-client 6RUN gem install bundler
./start_app.sh
ruby
1#!/bin/sh 2 3BUNDLER_PATH=./vendor/bundle # docker-composeのworkdirから相対パス 4 5#pidファイルが残ったままの場合、削除する 6if [[ -f ./tmp/pids/server.pid ]] 7then 8 rm ./tmp/pids/server.pid 9fi 10 11bundle install --path=$BUNDLER_PATH 12bundle exec rails s -b 0.0.0.0 13
考えたこと・試したこと
Errno::EISDIR: Is a directoryというメッセージはコンパイルする時にdirectoryはダメなんだよという読み込みエラーだということだと考えましたので
BUNDLE_APP_CONFIG: /app/hoge_web/.bundle/config
ではなく、
BUNDLE_APP_CONFIG: /app/hoge_web/.bundle/config/config.app
などと謎にファイル指定っぽいことをしてみましたが、これはこれで"config.app"と名のついたディレクトリを生成することになってしまいました。
また、コンテナ内で which bundleとやると、/usr/local/bundle/bin/bundleと出力され、ちゃんとその中にはbundleとbundlerのディレクトリが入っています。。
あなたの回答
tips
プレビュー