Dockerコンテナにカスタム環境変数を渡すことは可能ですか?

一部のクライアントライブラリ(例:GitHub - googleapis/google-auth-library-ruby: Google Auth Library for Ruby · GitHub yml ファイル経由で渡すことは可能でしょうか。

私は以下の方法を試しました:

  1. yml ファイルのカスタムコマンドセクションに export VAR=VALUE を追加する。
  2. yml ファイルの env セクションに VARIABLE: VALUE を追加する。

@merefield さんに、それが実際に可能だと指摘されました。

カスタムコマンドセクションで以下を実行してください。

# 変数を .bashrc ファイルに追加
exec: echo 'export VAR=value' >> ~/.bashrc
...
# ファイルを再読み込み
exec: source ~/.bashrc

このアプローチが実際に機能することを確認しました。:slight_smile:

追伸
どうやら source ~/.bashrc は環境を更新しないようです。おそらく呼び出しが早すぎるのかもしれません。

以下も試しました。
- exec: /bin/bash -c "source ~/.bashrc"

これにコンテナ定義の env: セクションを使うことはできませんか?それにより、Rails アプリがアクセスできる環境変数が作成されるはずです。

例えば、

env:
  CUSTOM_ENV: "value"

そうでない場合、pups はすでにホストの環境変数をパイプインしている ように見えます。

それだと Docker に関連するエラーが発生します。もしそう動作すれば非常に直感的だったのにね :slight_smile: もしかして私が変なのかな。カスタム変数は DISCOURSE_ で始まるもののみ許可するというルールがあると思います。

明日デスクに着いたら、env の件をもう一度試してみます。

さて、私がバカでした。これは問題なく動作します。問題はマルチライン値が原因でした。それを削除したところ、ビルドが成功しました。しかし、マルチライン値をどのように使用すればよいのでしょうか?

やった!動作するようにできました。問題は、RSA 秘密鍵を環境変数として使っていたことです。それを動作させるには以下の手順が必要です。

鍵をシングルクォート '' で囲み、鍵内に含まれるすべての \n の前に \ を追加してください。つまり、\n\\n になります。

参考までに、\n を直接更新するよりも、もっと簡単な方法があります。

例えば、以下のようにします:

key: |
  ---BEGIN SECRET KEY---
  SHH do not read this is secret
  ---END SECRET KEY---

キーの中央部分をそのまま貼り付けるという意味ですか?それなら、もう少しすっきりすると思います。

つまり、YAML は | 文字(およびオプションのバリエーション)から始まる複数行をサポートしているということです。

その後、プレフィックスのスペースを除き、キーをそのまま変更せずに貼り付けることができます。

私は愚かな試みとして、各 \n の代わりに | と実際の改行を追加してみましたが、うまくいきませんでした。