docker集装箱耙文件错误

我正在尝试运行Docker容器的开发环境。 我正在使用下面的docker文件

FROM phusion/passenger-ruby22:latest # Set correct environment variables. ENV HOME /root # Use baseimage-docker's init system. CMD ["/sbin/my_init"] # Expose Nginx HTTP service EXPOSE 80 # Start Nginx / Passenger RUN rm -f /etc/service/nginx/down # Remove the default site RUN rm /etc/nginx/sites-enabled/default # Add the nginx site and config ADD nginx.conf /etc/nginx/sites-enabled/webapp.conf ADD rails-env.conf /etc/nginx/main.d/rails-env.conf # Install bundle of gems WORKDIR /tmp ADD Gemfile /tmp/ ADD Gemfile.lock /tmp/ RUN bundle install # Add the Rails app ADD . /home/app/webapp RUN chown -R app:app /home/app/webapp # Clean up APT and bundler when done. RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

nginx.conf如下

 # webapp.conf server { listen 80; server_name localhost; root /home/app/webapp/public; passenger_enabled on; passenger_user app; passenger_ruby /usr/bin/ruby2.2; } 

和Rails Env文件一样,

 # rails-env.conf # Set Nginx config environment based on # the values set in the .env file env PASSENGER_APP_ENV; env RAILS_ENV; env SECRET_KEY_BASE; env APP_DEV_DB_HOST; env APP_DEV_DB_DATABASE; env APP_DEV_DB_PORT; env APP_DEV_DB_USERNAME; env APP_DEV_DB_PASSWORD; 

我把DB(MySQL)放在容器外面,并绑定了虚拟机的IP地址。

在build立docker镜像后,现在我正在尝试运行rake db:setup但是我收到如下消息,

 sudo docker run -i -t -e "RAILS_ENV=development" -e "APP_DEV_DB_HOST=myipaddress" -e "APP_DEV_DB_DATABASE=SampleApp_Development" -e "APP_DEV_DB_PORT=3306" -e "APP_DEV_DB_USERNAME=sampleapp_dev" -e "APP_DEV_DB_PASSWORD=pass_dev" -e "PASSENGER_APP_ENV=development" sample_base rake db:setup rake aborted! No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb) (See full trace by running task with --trace) 

同时,如果我运行这个使用bash,我可以在容器中运行rake db:setup

好奇地知道是什么造成了这个问题!

我期望这是因为你的WORKDIR被设置为/tmp ; 尝试在RUN bundle install后将其设置为/home/app/webapp

我也注意到了以下几点:

  • 这行不会保存任何空间。 RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ; 这些文件将仍然存在于以前的图层中。

  • 在运行时覆盖CMD指令( CMD ["/sbin/my_init"] ); 所以这个脚本中的任何东西都不会运行。