2017-05-31 10 views
1

同じサーバーのブロックチェーンに接続するnodejsアプリケーションがあります。通常、私は127.0.0.1 +ポート番号を使用します(各チェーンは異なるポートを取得します)。ドッカーコンテナのローカルホストに接続するには(コンテナ内から)

私はチェーンとアプリケーションを同じコンテナに入れて、フロントエンドの開発者がチェーンの設定を気にする必要がないようにしました。

しかし、私が画像を構築するとき、鎖が始まるはずです。私がイメージを走らせるとき、それはそうではありません。さらに、私がコンテナに入って手動で実行しようとすると、 "[email protected]:PORT"と表示されます。だから私は127.0.0.1の代わりに127.0.0.2のポートに接続する必要があると思ったが、それはうまくいかない。

これは新しいものではなく、データベースと同じように動作するはずです。誰も助けることができますか?最初のアドバイスは、どうやって間違っているのか分からないので、これらのイメージをデバッグする方法です。ここ

は私dockerfileがところでによる政策へ

FROM ubuntu:16.04 
RUN apt-get update 
RUN apt-get install -y curl 
RUN apt-get install -y apt-utils 
RUN apt-get install -y build-essential 
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - 
RUN apt-get install -y nodejs 
ADD workfolder/app /root/applications/app 
ADD .multichain /root/.multichain 
RUN npm install \ 
    && apt-get upgrade -q -y \ 
     && apt-get dist-upgrade -q -y \ 
     && apt-get install -q -y wget curl \ 
     && apt-get clean \ 
     && rm -rf /var/lib/apt/lists/* \ 
     && cd /tmp \ 
     && wget http://www.multichain.com/download/multichain-1.0-beta-1.tar.gz \ 
     && tar -xvzf multichain-1.0-beta-1.tar.gz \ 
     && cd multichain-1.0-beta-1 \ 
     && mv multichaind multichain-cli multichain-util /usr/local/bin \ 
     && cd /tmp \ 
     && rm -Rf multichain* 
RUN multichaind Chain -daemon 
RUN cd /root/applications/app && npm install 
CMD cd /root/applications/app && npm start 
EXPOSE 8080 

である私はそれが動作するかどうかを確認するために、ポート80でサーバーに接続することができます。ドッカー画像を実行すると、私は/ api-docsに行くことができますが、エンドポイントではブロックチェーンとのやりとりを開始できません。

+0

ブロックチェーンを開始するには、CMDや 'docker run'で何をしていますか? – Robert

+0

sudo docker run -d -p 80:8080 Rachelle

+1

あなたはどのプログラムを起動したいのかをドッカーに伝える必要があります。 Dockerfileの 'CMD'または' ENTRYPOINT'でこれを達成できます。そこに何かありますか? – Robert

答えて

3

私はチェーンと間違いだった同じコンテナ

でアプリを置くことを決めた、私は思います。

Dockerは仮想マシンではありません。これは仮想アプリケーションまたはプロセスインスタンスです。

DockerコンテナはLinuxディストリビューションを実行しますが、これはDockerの目的を考えるときに無視する必要がある詳細です。

Dockerコンテナは、一般的に複数のプロセスを実行する完全仮想マシンではなく、単一のアプリケーションプロセスと考えるべきです。これは、メインプロセスがシャットダウンすると(PID 1のプロセス)、Dockerがコンテナをシャットダウンする方法によって証明されます。

私はここで、このことについて長い記事を持っている:https://derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/

また、あなたのdockerfileでRUN multichaind命令は、あなたのイメージ/コンテナ内のチェーンを実行しません。ビルドプロセス中にこの命令を実行するようにイメージに指示します。

Dockerfileは、画像を作成するための手順のリストです。ここでの言葉遣いは重要です。画像は実行されず、構築されます。イメージは、コンテナが実行される静的で不変なテンプレートです。あなたのイメージにこのRUN命令を置くことによって

-daemon

RUN multichaindチェーンは、あなたが一時的にチェーンを開始しているが、画像層を構築して行われたときには、すぐに(強制的に)停止します。イメージは実行されないので、実行されません。

私の助言は、チェーンを別のイメージに置くことです。

チェーン用に1つ、node.jsアプリ用に1つの画像があります。

docker-composeを使用すると、これらの両方からコンテナを同時に簡単に実行できるようになります。または、コンテナを手動で実行することもできます。いずれにしても、2つの画像が必要です。

+0

ありがとう!それを試みます。しかし、これは1つのイメージにすべてを入れる問題につながります:あるコンテナから別のコンテナのチェーンにアプリケーションを接続するにはどうすればいいですか?過去に私はちょうど127.0.0.1に接続しました: Rachelle

+0

ドッカーは各コンテナの場所であるデフォルトの仮想ネットワークを作成します。他のコンテナから名前で各コンテナにアクセスできます。 "chain"という名前のコンテナがある場合、使用するDNS名は "chain"です。他のコンテナでは "chain:"にアクセスします。 docker-composeにはこのすべての設定が含まれており、これを処理するための「サービス検出」などの高度なトピックもあります –

関連する問題