Bundler在使用本地gempath的Docker镜像服务中失败
我正在使用一个docker-compose.yml
文件。
version: '2' services: myapp: tty: true image: ruby:2.4 ports: - 3000:3000 volumes: - .:/app env_file: - .env sidekiq: build: . command: bundle exec sidekiq
sidekiq
工作正常,并从myapp
生成相同的Dockerfile
信息构build。 但是,当我在我的Gemfile中添加一些需要本地目录访问的gem依赖项时,它失败了。
将此添加到Gemfile
和bundle update
将不允许sidekiq
生成。
gem 'rails-assets-jplayer', path: 'lib/gems/rails-assets-jplayer' gem 'rails-assets-bootstrap', path: 'lib/gems/rails-assets-bootstrap' gem 'rails-assets-jquery', path: 'lib/gems/rails-assets-jquery' gem 'rails-assets-jquery-ui', path: 'lib/gems/rails-assets-jquery-ui'
添加这些后,我只从sidekiq
得到这个错误,而不是从myapp
(它的工作原理)。
myapp uses an image, skipping Building sidekiq Step 1/4 : FROM ruby:2.4-onbuild # Executing 4 build triggers... Step 1/1 : COPY Gemfile /usr/src/app/ ---> Using cache Step 1/1 : COPY Gemfile.lock /usr/src/app/ ---> Using cache Step 1/1 : RUN bundle install ---> Running in ccfd0fc73542 The path `/usr/src/app/lib/gems/rails-assets-jquery-ui` does not exist. ERROR: Service 'sidekiq' failed to build: The command '/bin/sh -c bundle install' returned a non-zero code: 13
我无法弄清楚,如果目录结构在sidekiq
是不同的,或者如果它真的不能访问这个子文件夹。 有没有一种方法可以反思bundle install
的path? 更重要的是 我怎样才能让当地的gem在第二个容器里工作?
如果你打算询问一个Dockerfile
– 不要。 这完全是docker-compose
生成的,并没有被修改。 就像我说过的,如果Gemfile
没有Gemfile
需要的本地gem,这两个Gemfile
工作。