継続的ブログ

主にweb系の技術について書いています

docker build 時に必要な RAILS_MASTER_KEY を Buildkit の Secret Mount で渡す

docker build 時に assets:precompile してコンテナに assets を含めてしまう場合などは RAILS_MASTER_KEY をどうにかして渡す必要があるかと思います。

ARG で渡すことも可能ですが、 docker history で見ることができてしまうので公式でも秘匿情報を扱う際は推奨していません。

docs.docker.com

そこで今回は Buildkit の Secret Mount を使って安全に渡したいと思います。

$ echo $RAILS_MASTER_KEY > /tmp/master_key.txt
$ DOCKER_BUILDKIT=1 docker build --secret id=master_key,src=/tmp/master_key.txt  .

Dockerfile

# syntax = docker/dockerfile:1.0-experimental

...

RUN --mount=type=secret,id=master_key,dst=config/master.key,required \
      bundle exec rails assets:precompile

dive をつかって最終イメージをみてみると config/master.key には 0 byte のファイルがあるだけです。

f:id:akiza:20201127195128p:plain

動かす際は ENV['RAILS_MASTER_KEY'] を渡してやれば config/master.key より優先されます。

rails/encrypted_file.rb at master · rails/rails · GitHub

参考