Docker-compose – Ruby – 指南针 – inotify

我试图让一个Docker容器能够看我的项目并编译应该编译的内容。 有了Sass,我有一些与inotify相关的问题。

当我尝试启动时:

compass watch --sass-dir /var/www/project/styles/sass/ --css-dir /var/www/project/styles/ -c /var/www/project/styles/config.rb 

我有这个错误:

 root@88843683f769:/# compass watch --sass-dir /var/www/lbo_legacy/styles/sass --css-dir /var/www/lbo_legacy/styles/ -c /var/www/lbo_legacy/styles/config.rb --trace >>> Compass is watching for changes. Press Ctrl-C to Stop. Errno::EMFILE on line ["58"] of /var/lib/gems/2.3.0/gems/rb-inotify-0.9.10/lib/rb-inotify/notifier.rb: Too many open files - Failed to initialize inotify: the user limit on the total number of inotify instances has been reached. /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapters/linux.rb:66:in `new' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapters/linux.rb:66:in `initialize_worker' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:87:in `initialize' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapters/linux.rb:31:in `initialize' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:228:in `new' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:228:in `works?' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `block in usable_and_works?' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `each' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `all?' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `usable_and_works?' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:57:in `block in select_and_initialize' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:55:in `each' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:55:in `select_and_initialize' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/listener.rb:291:in `initialize_adapter' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/listener.rb:283:in `setup' /var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/listener.rb:65:in `start!' /var/lib/gems/2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:408:in `listen_to' /var/lib/gems/2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:341:in `watch' /var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/sass_compiler.rb:46:in `watch!' /var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/commands/watch_project.rb:41:in `perform' /var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/commands/base.rb:18:in `execute' /var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/commands/project_base.rb:19:in `execute' /var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/exec/sub_command_ui.rb:43:in `perform!' /var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/exec/sub_command_ui.rb:15:in `run!' /var/lib/gems/2.3.0/gems/compass-1.0.3/bin/compass:30:in `block in <top (required)>' /var/lib/gems/2.3.0/gems/compass-1.0.3/bin/compass:44:in `<top (required)>' /usr/local/bin/compass:23:in `load' /usr/local/bin/compass:23:in `<main>' 

我已经尝试过增加rb-inotify用户限制,但仍然是相同的错误。

我的Dockerfile:

 FROM ubuntu:latest ENV DEBIAN_FRONTEND noninteractive RUN echo fs.inotify.max_user_watches=500000 | tee -a /etc/sysctl.conf RUN echo fs.inotify.max_queued_events=500000 | tee -a /etc/sysctl.conf RUN apt-get --quiet update RUN apt-get install --yes --no-install-recommends gnupg2 vim wget git curl ca-certificates # Node.js (and NPM). RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - \ && apt-get install --yes nodejs build-essential #Ruby RUN apt-get install -y ruby ruby-dev rubygems # Rake. RUN gem install --no-rdoc --no-ri rake #Sass RUN gem install --no-rdoc --no-ri sass -v 3.4.22 # Compass. RUN gem install --no-rdoc --no-ri compass # Bower, Grunt CLI, Gulp. RUN npm install --global bower grunt-cli gulp # Clean up. RUN apt-get autoremove --yes \ && apt-get clean 

如果我运行“sysctl -p”:

 root@88843683f769:/# sysctl -p fs.inotify.max_user_watches = 500000 fs.inotify.max_queued_events = 500000 

如果需要的话,我的config.rc(但是同样的行为有或没有-c参数…)

 require 'compass/import-once/activate' # Require any additional compass plugins here. add_import_path "../assets/zurb_mail/node_modules/foundation-emails/scss" # Set this to the root of your project when deployed: http_path = "/" css_dir = "." sass_dir = "sass" images_dir = "images" javascripts_dir = "javascripts" # You can select your preferred output style here (can be overridden via the command line): # output_style = :expanded or :nested or :compact or :compressed output_style= :compressed # To enable relative paths to assets via compass helper functions. Uncomment: # relative_assets = true # To disable debugging comments that display the original location of your selectors. Uncomment: # line_comments = false # If you prefer the indented syntax, you might want to regenerate this # project again passing --syntax sass, or you can uncomment this: # preferred_syntax = :sass # and then run: # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass 

它工作正常我的Ubuntu主机寿…

任何想法家伙?

所以,我没有真正解决这个问题,但是我find了一个解决方法。 在罗盘监视命令上添加-poll标记可以做到这一点。 它使用计时器而不是系统文件事件。