Docker撰写Rails教程:这些文件到哪里去了?

我一直在关注Docker Compose Rails教程 。 它一直做得很好,直到我运行docker-compose run web rails new . --force --database=postgresql --skip-bundle docker-compose run web rails new . --force --database=postgresql --skip-bundle (好吧,安装顺利:))

以下是发生的事情:

 ▶ sudo docker-compose run web rails new . --force --database=postgresql --skip-bundle Creating dockers_db_1... Building web... Step 0 : FROM ruby:2.1.4 ---> 766162a99b23 Step 1 : RUN apt-get update -qq && apt-get install -y build-essential libpq-dev ---> Using cache ---> 0053b73703c1 Step 2 : RUN mkdir /myapp ---> Using cache ---> bf768c1e06ca Step 3 : WORKDIR /myapp ---> Using cache ---> 934af3ef8124 Step 4 : ADD Gemfile /myapp/Gemfile ---> Using cache ---> 3666057e0d52 Step 5 : RUN bundle install ---> Using cache ---> e796e93e83d6 Step 6 : ADD . /myapp ---> Using cache ---> 03249ac42a63 Successfully built 03249ac42a63 exist create README.rdoc create Rakefile create config.ru create .gitignore force Gemfile create app create app/assets/images/rails.png create app/assets/javascripts/application.js create app/assets/stylesheets/application.css create app/controllers/application_controller.rb create app/helpers/application_helper.rb create app/mailers create app/models create app/views/layouts/application.html.erb create app/mailers/.gitkeep create app/models/.gitkeep create config create config/routes.rb create config/application.rb create config/environment.rb create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb create config/initializers create config/initializers/backtrace_silencers.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/secret_token.rb create config/initializers/session_store.rb create config/initializers/wrap_parameters.rb create config/locales create config/locales/en.yml create config/boot.rb create config/database.yml create db create db/seeds.rb create doc create doc/README_FOR_APP create lib create lib/tasks create lib/tasks/.gitkeep create lib/assets create lib/assets/.gitkeep create log create log/.gitkeep create public create public/404.html create public/422.html create public/500.html create public/favicon.ico create public/index.html create public/robots.txt create script create script/rails create test/fixtures create test/fixtures/.gitkeep create test/functional create test/functional/.gitkeep create test/integration create test/integration/.gitkeep create test/unit create test/unit/.gitkeep create test/performance/browsing_test.rb create test/test_helper.rb create tmp/cache create tmp/cache/assets create vendor/assets/javascripts create vendor/assets/javascripts/.gitkeep create vendor/assets/stylesheets create vendor/assets/stylesheets/.gitkeep create vendor/plugins create vendor/plugins/.gitkeep 

所以我喜欢“哦,很酷,它的作品”。

但是,我需要编辑Gemfile 。 主机Gemfile没有改变:

 cat Gemfile source 'https://rubygems.org' gem 'rails', '3.2.18' 

所以我想我需要进入我的docker:

 ▶ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE workspace_web latest 03249ac42a63 8 hours ago 835.3 MB dockers_web latest 03249ac42a63 8 hours ago 835.3 MB postgres latest 7bf0ec35adaf 6 days ago 214 MB hello-world latest 91c95931e552 9 weeks ago 910 B ruby 2.1.4 766162a99b23 7 months ago 798.3 MB 

但是那里的文件看起来是一样的:

 ▶ sudo docker run -t -i workspace_web /bin/bash root@400ca3fd62a7:/myapp# cat Gemfile source 'https://rubygems.org' gem 'rails', '3.2.18' 

rails new生成的文件去了哪里? 一直在四处搜寻,没有成功。

我在Debian上,所以不使用Boot2docker。

谢谢

docker-compose.yml注意以下几行:

 volumes: - .:/myapp 

/myapp被映射到当您运行docker-compose run时所在的当前目录 – 所以这是您应该查找这些文件的位置。

当你使用sudo docker run -t -i workspace_web /bin/bash你没有添加-v .:/mapp所以你的/myapp文件夹没有被装载,并且在容器中保持空的容量。

docker-rails是我刚刚创build的一个项目,它使得docker(和CI) 非常容易 。 我认为它可以帮助你,并减less在docker上启动和运行rails所需的configuration。

它也将帮助你将这些文件提取回主机。 在我的性能testing中,执行如下操作:

 volumes: - .:/myapp 

因为它正在安装一个音量,因此速度降低4倍 . 在主机上。 相反,如Dockerfile -rails示例中所做的那样,使用Dockerfile VOLUME来获得几乎原生的I / O速度(绕过任何联合文件系统)并COPY项目目录。 这意味着你的所有文件将驻留在容器中,所以你需要extract任何想要的文件。 docker-rails使得这非常简单,例如,我使用这个提取来处理我的testing工件:

  web: extract: - '/project/target' - '/project/vcr' - '/project/tmp' - '/project/log' 

TLDR; 有很多技巧让docker/撰写正确的轨道运行。 检出docker导轨 ,它在一个地方都有。