如何连接到Docker容器的本地主机(从容器内部)

我有一个nodejs应用程序连接到同一台服务器上的区块链。 通常我使用127.0.0.1 +端口号(每个链得到不同的端口)。

我决定把链和应用程序放在同一个容器中,这样前端开发人员就不必费心设置链。

但是,当我build立图像链应该开始。 当我运行图像时,它不是。 此外,当我去容器中,并尝试手动运行它说:“besluitChain2@xxx.xx.x.2:端口”。 所以我想,而不是127.0.0.1我需要连接到端口上的127.0.0.2,但似乎没有工作。

我确定像这样连接并不新鲜,而且应该和数据库一样工作。 谁能帮忙? 第一条build议是如何debugging这些图像,因为我不知道它出错的地方。

这是我的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服务器,以检查是否工作。 当我运行Docker镜像时,我可以转到我的/ api-docs,但不能转到任何开始与区块链交互的端点。

我决定把链和应用程序放在同一个容器中

我想这是一个错误。

Docker不是一个虚拟机。 这是一个虚拟应用程序或stream程实例。

一个Docker容器在底层运行一个linux发行版,但是这是一个在考虑Docker的目的时应该忽略的细节。

您应该将Docker容器看作是单个应用程序进程,而不是将整个虚拟机运行一般运行多个进程。 一旦主进程closures(使用PID 1的进程),Docker将closures容器的方式就是certificate。

我有一个更长的post,在这里: https : //derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/

此外,dockerfile中的RUN multichaind指令不会在图像/容器中运行链。 它告诉图像在构build过程中运行这个指令。

Dockerfile是用于构build映像的指令列表。 这里的措辞很重要。 图像不被执行,它被构build。 图像是一个静态的,不可变的模板,从中执行一个容器。

运行multichaind链 – 守护进程

通过将这个RUN指令放在图像中,你暂时启动了这个链,但是当图像层完成时,它立即停止(强制)。 它不会保持运行,因为图像不被执行,它被构build。

我的build议是把链条放在一个单独的图像。

你将有一个图像的链,一个为node.js应用程序。

您可以使用docker-compose来更轻松地同时从这两个容器运行容器。 或者你可以从它们手动运行容器。 无论哪种方式,你需要两个图像。