debugging轨道应用程序与stream浪汉运行docker

我试图找出与stream浪和docker运行轨应用程序的最佳开发工作stream程。 在我的dockerfile中我有这个:

FROM quirky/rails:latest RUN mkdir /opt/app WORKDIR /opt/app # Install gems ADD ./Gemfile /opt/app/Gemfile ADD ./Gemfile.lock /opt/app/Gemfile.lock RUN bundle install # Instal npm packages ADD ./package.json /opt/app/package.json RUN npm install # Expose directories and ports VOLUME /opt/app EXPOSE 3000 # Run the web server WORKDIR /opt/app CMD rm -f /opt/app/tmp/pids/server.pid && bundle exec rails s 

我的Vagrantfile看起来像这样:

  config.vm.define "app" do |app| app.vm.provider "docker" do |d| d.build_dir = "." d.link "db:db" d.link "redis:redis" d.link "solr:solr" d.volumes = ["/app:/opt/app"] d.ports = ["3000:3000"] d.vagrant_vagrantfile = "./docker/Vagrantfile" d.remains_running = true end end config.vm.define "db" do |db| db.vm.provider "docker" do |d| d.image = "paintedfox/postgresql" d.name = "db" d.env = {USER: "vagrant", PASS: "password"} d.vagrant_vagrantfile = "./docker/Vagrantfile" end end config.vm.define "redis" do |redis| redis.vm.provider "docker" do |d| d.image = "dockerfile/redis" d.name = "redis" d.ports = ["6379:6379"] d.vagrant_vagrantfile = "./docker/Vagrantfile" end end config.vm.define "solr" do |solr| solr.vm.provider "docker" do |d| d.image = "quirky/solr" d.name = "solr" d.ports = ["8080:8080"] d.vagrant_vagrantfile = "./docker/Vagrantfile" end end 

通常,如果我想debugging某些东西,只需在代码中添加一条debugger语句,并将其作为本地进程运行,并且只是触发断点并调出pry或debugging器控制台。 这是如何工作在一个容器内的stream浪者?

这是我如何开始我的开发环境:

 vagrant up app --provider=docker 

它在后台启动它。 似乎没有办法启动它并附加到它。 我是否错过了一个我可以通过stream浪的命令或国旗?

您正在寻找nsenter docker execnsenter [ 1 ]。 使用这些工具之一,您可以在不使用SSH的情况下login容器并检查日志。

如果你想debugging创build和运行docker-container的stream浪汉,你可以添加如下的--debug标志:

 vagrant up app --provider=docker --debug 

但是这不会直接给你任何来自Vagrantfile的debugging信息。 如果你仍然想从你的vagrantfile中得到debugging信息,我build议你阅读有关stream浪者的UI类。

PS:也许你只是想把这样的陈述: puts "I'm here!"

PPS:如果你想坚持使用stream浪汉和SSH, has_ssh值和SSH服务器是最好的select。

nsenter / docker exec

您是否尝试过Vagrand Docker提供程序的has_ssh选项? 它指出:

如果是的话,那么Vagrant将会使用容器来支持SSH。 这允许vagrant ssh工作,供应商等,这默认为false

另外,我自己也没有尝试过。 我正在使用Docker与CoreOS镜像并手动运行Docker容器(configuration)。