问题描述
我想用 Docker 部署一个 Rails 应用。
Dockerfile 的内容如下:
FROM ruby:2.2.2ENV APP_HOME /myappRUN mkdir $APP_HOMEWORKDIR $APP_HOMEADD Gemfile $APP_HOME/GemfileADD Gemfile.lock $APP_HOME/Gemfile.lockADD init.sh $APP_HOME/RUN export LANG=C.UTF-8 && bundle installADD . $APP_HOMECMD ['sh', 'init.sh']
init.sh 程序执行脚本内容如下:
#!/bin/shbundle exec rake db:setupbundle exec rake db:seed_fubundle exec sidekiq -C config/sidekiq.ymlbundle exec rails server -b 0.0.0.0
当我编译完这个程序镜像:
docker build -t myapp .
运行它时:
docker run --name web -d -p 3000:3000 myapp
从日志中看到:
docker logs webinit.sh: 2: init.sh: bundle: not foundinit.sh: 3: init.sh: bundle: not foundinit.sh: 4: init.sh: bundle: not foundinit.sh: 5: init.sh: bundle: not found
是执行 bundle 的路径问题,怎么指定正确的路径呢?
问题解答
回答1:bundle 没有安装吧,在执行 bundle 命令前先安装一下 bundle。
如果确定一定以及肯定 bundle 安装了,那应该是环境变量的问题,没有找到。用 which bundle 找到,再在执行 bundle 前修改环境变量。