3

ノード イメージの作成時に、mongo コンテナーの IP アドレスを取得して環境変数として設定するにはどうすればよいですか?

keystone.js、forever、および docker という技術スタックが競合するという問題に直面しています。私の問題は、別の mongo コンテナーの環境変数を設定する必要があることです。これは、以下を含むコンテナーを起動するときにシェル スクリプトを実行することで簡単に実行できるように思われます。

export MONGO_URI="mongodb://${MONGODB_PORT_27017_TCP_ADDR}:27017/(db_name)"

この問題は、keystone アプリの起動時に発生します。通常、同じスクリプトに配置して docker run で呼び出しますが、このプロジェクトは永久に使用する必要があります。コマンドはforever keystone.js. これには、docker コンテナーがすぐにドロップするという問題があります。forever startスクリプトに移動するのではなく単純にアプリを起動すると、アプリは正常に起動しますが、必要な環境変数が設定されていません。これは docker イメージにハード コードされていますが、もちろんこれは良い解決策ではありません。mongodb の IP が将来変更される可能性があり、ノード コンテナーの再起動時に db を見つけることができないからです。いくつかの可能性を参照してください。

  1. ノード keystone.js のみを使用するように切り替えると、永遠に開始する機能が失われます (重大な障害が発生した場合にアプリが再起動されます)。テスト済みでこれは機能しますが、おそらく誰かが永遠に機能する方法または実行可能な代替手段を知っていますか?

  2. イメージの作成時に docker ファイルから上記のエクスポートを設定する方法を見つけます。これを機能させることはできませんでしたが、それが役立つかどうかに関係なく、mongdbが使用する名前を知っています

どんな助けでも大歓迎です。

4

1 に答える 1

3

最良の方法は、ホスト名と環境変数を提供する docker linkを使用することです。

docker run ... --link mongodb:mongodb ..

また、実行からコマンドラインオプションを使用することもできます

docker run -e MONGO_URI="mongodb://${MONGODB_PORT_27017_TCP_ADDR}:27017/(db_name)"

動的 DNS のオプションはSkyDNS + SkyDockです。

于 2014-12-09T22:03:44.857 に答える