[英]How do I connect to the localhost of a docker container (from inside the container)
我有一个nodejs应用程序连接到同一服务器上的区块链。 通常我使用127.0.0.1 +端口号(每个链获得一个不同的端口)。
我决定将链和应用程序放在同一个容器中,这样前端开发人员就不必费心设置链了。
但是,当我构建图像时,链应该开始。 当我运行图像时,它不是。 此外,当我进入容器并尝试手动运行时,它会显示“besluitChain2@xxx.xx.x.2: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的服务器,以检查它是否有效。 当我运行docker镜像时,我可以转到我的/ api-docs,但不能转到我开始与区块链交互的任何端点。
我决定将链和应用程序放在同一个容器中
我想这是一个错误。
Docker不是虚拟机。 它是一个虚拟应用程序或流程实例。
Docker容器在底层运行Linux发行版,但这是一个在考虑Docker的目的时应该忽略的细节。
您应该将Docker容器视为单个应用程序进程,而不是通常运行多个进程的完整虚拟机。 这可以通过Docker在主进程关闭后关闭容器的方式来证明(使用PID 1的进程)。
我在这里有一篇更长的帖子,这里: https : //derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/
此外,dockerfile中的RUN multichaind
指令不会在映像/容器中运行链。 它告诉图像在构建过程中运行此指令。
Dockerfile是用于构建映像的指令列表。 这里的措辞很重要。 不执行图像,它是构建的。 图像是一个静态的,不可变的模板,从中执行Container。
RUN multichaind Chain -daemon
通过在图像中放置此RUN
指令,您将暂时启动链,但在图像层完成构建时会立即停止(强制)。 它不会继续运行,因为图像不会被执行,它会被构建。
我的建议是将链条放在一个单独的图像中。
你将有一个链的图像,一个用于node.js应用程序。
您可以使用docker-compose,以便更容易同时运行这两个容器。 或者您可以从它们手动运行容器。 无论哪种方式,你需要两个图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.