1

コードビルドプロセス中に環境変数が必要です。Codebuild を使用すると、詳細設定で環境変数をセットアップできます。これは私が行ったものです。

codebuildを実行すると、これらの環境変数が渡されていないように見えます。

私はprocess.envを印刷しました& これが私が得たものです:

NAME: '037fga72',
[Container] 2017/02/08 01:55:03 NPM_CONFIG_LOGLEVEL: 'info',
[Container] 2017/02/08 01:55:03 PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
[Container] 2017/02/08 01:55:03 PWD: '/usr/src/app',
[Container] 2017/02/08 01:55:03 SHLVL: '1',
[Container] 2017/02/08 01:55:03 HOME: '/root',
[Container] 2017/02/08 01:55:03 _: '/usr/local/bin/knex' } 'process.env variables...'

私の環境変数はありません。

DB_PASS、DB_USER、DB_NAME、DB_HOST をセットアップしました - これらのどれも出力されません。

新しいコードビルドを作成して環境変数を追加しようとしましたが、うまくいきませんでした。

docker コンテナーを構築していることに注意してください。環境変数 (パスワード、ホストなど) が渡されていないため、postgres データベースに接続しようとすると失敗します。

編集

私の Dockerfile では、次の bash ファイルを実行しています。

#!/bin/bash
echo "running"
function mytest {
    "$@"
    local status=$?
    if [ $status -ne 0 ]; then
        knex migrate:rollback 
      echo "Rolling back knex migrate $1" >&2
      exit 1
    fi
    return $status
}

mytest knex migrate:latest 

これが行っているのは、knex マイグレーション (js スクリプト) の実行です。失敗した場合は、マイグレーションをロールバックしてビルドを終了します。

4

2 に答える 2

6

Docker は、ビルド時にホストレベルの環境変数をコンテナーに渡さないため、CodeBuild の環境変数はデフォルトでは提供されません。ただし、ビルド引数を使用すると、環境変数をコンテナーにチェーンできます。

たとえば、次の Dockerfile を使用します。

FROM ubuntu:14.04

ARG foo
ENV MYVAR=$foo
RUN echo $MYVAR

次のコマンドを使用して、コンテナーに MYVAR の値を設定できます。docker build -t <tag> --build-arg foo=bar .

中の出力例は次のdocker buildとおりです。

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu:14.04
 ---> b969ab9f929b
Step 2 : ARG foo
 ---> Using cache
 ---> a6c71d477a6c
Step 3 : ENV MYVAR $foo
 ---> Running in 49efc25c81d9
 ---> ecfc651713b8
Removing intermediate container 49efc25c81d9
Step 4 : RUN echo $MYVAR
 ---> Running in 2fc43629aa44
bar
 ---> 86dd113f6c7b
Removing intermediate container 2fc43629aa44
Successfully built 86dd113f6c7b

--build-arg特定のユース ケースでは、docker ビルドフラグ (例: ) で環境変数の値を指定し、Dockerfile で--build-arg db_user=$DB_USERarg の値を設定します。ENV

于 2017-02-13T21:15:25.537 に答える