我想用 Docker 部署一個 Rails 應用程式。
Dockerfile 的內容如下:
FROM ruby:2.2.2
ENV APP_HOME /myapp
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
ADD Gemfile $APP_HOME/Gemfile
ADD Gemfile.lock $APP_HOME/Gemfile.lock
ADD init.sh $APP_HOME/
RUN export LANG=C.UTF-8 && bundle install
ADD . $APP_HOME
CMD ["sh", "init.sh"]
init.sh 程式執行腳本內容如下:
#!/bin/sh
bundle exec rake db:setup
bundle exec rake db:seed_fu
bundle exec sidekiq -C config/sidekiq.yml
bundle exec rails server -b 0.0.0.0
當我編譯完這個程式鏡像:
docker build -t myapp .
執行它時:
docker run --name web -d -p 3000:3000 myapp
從日誌中看到:
docker logs web
init.sh: 2: init.sh: bundle: not found
init.sh: 3: init.sh: bundle: not found
init.sh: 4: init.sh: bundle: not found
init.sh: 5: init.sh: bundle: not found
是執行 bundle
的路徑問題,怎麼指定正確的路徑呢?
bundle 沒有安裝吧,在執行 bundle 指令前先安裝一下 bundle。
如果確定一定以及肯定 bundle 安裝了,那應該是環境變數的問題,沒有找到。用
which bundle
找到,再在執行 bundle 前修改環境變數。