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依赖项时,它失败了。

将此添加到Gemfilebundle 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工作。