Docker 容器 rake 文件错误
Docker container rake file error
我正在尝试 运行 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) 放在容器外,并绑定了 VM IP 地址。
构建 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
我还注意到以下几点:
这一行不会保存任何内容space RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
;这些文件仍将存在于之前的层中。
您在 运行 时覆盖了 CMD 指令 (CMD ["/sbin/my_init"]
);所以这个脚本中的任何内容都不会是 运行.
我正在尝试 运行 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) 放在容器外,并绑定了 VM IP 地址。
构建 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
我还注意到以下几点:
这一行不会保存任何内容space
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
;这些文件仍将存在于之前的层中。您在 运行 时覆盖了 CMD 指令 (
CMD ["/sbin/my_init"]
);所以这个脚本中的任何内容都不会是 运行.