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"]
); 所以这个脚本中的任何东西都不会运行。