繁体   English   中英

如何连接到docker容器的localhost(从容器内部)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM