Ruby bundle install not cached as docker layer and keep getting re-run every build

In our Ruby application Dockerfile, we have a layer to install all gems. It appears that although this does not change, that the layer produced in docker build is not cached anywhere. Locally on my laptop, subsequent docker builds skip that layer since it did not change. In Qovery however, this is run every on very single deploy which results in our build taking much longer time than when built locally or in Heroku. Any ideas for us?


Here is the relevant section from our Dockerfile.

WORKDIR /mydir
COPY Gemfile* /mydir

RUN bundle install -j4

Hi @sama213 :wave: , can you show the whole Dockerfile? It’s possible that something like env vars/secrets invalid cache.

FROM ruby:2.6.9-bullseye AS builder

ENV BUNDLE_WITHOUT='development:test'
ENV BUNDLE_PATH=vendor/bundle
ENV BUNDLE_BIN=vendor/bundle/bin

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client && \
  apt-get install ca-certificates && \
  git config --global url."".insteadOf git:// && \
  bundle config github.https true

WORKDIR /myorg
COPY Gemfile* /myorg

RUN bundle install -j4

WORKDIR /myorg
COPY . /myorg

RUN bundle exec rake assets:precompile

COPY /usr/bin/
RUN chmod +x /usr/bin/


CMD ["bundle", "exec",  "puma", "-C",  "./config/puma.rb"]

Is it the complete dockerfile?

yes, it is the complete docker file

Can you give more details on:

  1. How long the build takes on your local machine?
  2. How long the build takes on Qovery?

For Qovery, you can know how long it takes by subtracting the end time from the start time (we’re working to make it simpler).

End time

Start time

Note you can also know how long each Docker build step takes

Local MacBook (81 seconds)
docker build -t l-puma . -f Dockerfile.puma
[+] Building 81.9s (15/15) FINISHED

Qovery - about 195 seconds (about 3 minutes from build start to container ready in ECR).

03 Apr, 19:39:57.075 - Build started.
03 Apr, 19:43:12.647. - container ready in ECR
03 Apr, 19:44:26.883 - Deployed container

And when you manually redeploy with Qovery (Actions → redeploy) ? (I want to check if the cache is well used without any code change)

1 Like

If I do a redeploy with no code changes, I get a message that container already exists and the entire build process gets skipped. If any code changes, then re-build takes place.

It appears that build process is not caching base ruby image. The following keeps running for redeploys if code changed. I would assume that our base image for linux ruby would be cached.

#5 [1/9] FROM

04 Apr, 08:57:29.773

#5 sha256:ae6053300e08f05928b5514b26258dc4a24ffdc0a1195916801012a496b7ab5a 175B / 175B 0.2s
04 Apr, 08:57:29.773

#5 sha256:cbfac96e475838046bddd6b562586b511bf2aa4cd050b0e0edba58c0683b8ae1 147.46kB / 21.68MB 0.2s
04 Apr, 08:57:29.774

#5 sha256:26e7ceebb0b46999ab07630803680603213e4d63c622a1c2ff6efaf4cf86cbc6 0B / 200B 0.2s
04 Apr, 08:57:29.782

#5 sha256:cbfac96e475838046bddd6b562586b511bf2aa4cd050b0e0edba58c0683b8ae1 5.14MB / 21.68MB 0.3s

04 Apr, 08:57:29.782

#5 sha256:b19a994f6d4cdbb620339bd2e4ad47b229f14276b542060622ae447649294e5d 0B / 54.58MB 0.2s
04 Apr, 08:57:29.782

#5 sha256:cbfac96e475838046bddd6b562586b511bf2aa4cd050b0e0edba58c0683b8ae1 11.53MB / 21.68MB 0.5s
04 Apr, 08:57:29.783

#5 sha256:26e7ceebb0b46999ab07630803680603213e4d63c622a1c2ff6efaf4cf86cbc6 200B / 200B 0.3s
04 Apr, 08:57:29.783

#5 sha256:b19a994f6d4cdbb620339bd2e4ad47b229f14276b542060622ae447649294e5d 5.93MB / 54.58MB 0.5s
04 Apr, 08:57:29.783

#5 sha256:cbfac96e475838046bddd6b562586b511bf2aa4cd050b0e0edba58c0683b8ae1 17.83MB / 21.68MB 0.6s

If the cache is invalidated, it means that something is changing from your image at a higher level. Can you please show me the complete Dockerfile (it’s important - otherwise I can’t troubleshoot correctly)

@rophilogene , that is our ENTIRE file :slight_smile: