如何在单独的Docker容器中运行时将Node.js应用程序连接到数据库?

时间:2017-07-19 16:14:47

标签: node.js docker neo4j

我正在运行这些容器:

enter image description here

我可以按预期访问struct FibLevel { double retrace38; double retrace50; double retrace61; double extension61; double extension100; double extension138; double extension161; }; void FibLevel(double price1, double price2,FibLevel &fiblevel) { double range = MathAbs(price1-price2); fiblevel.retrace38 =(price1<price2)?price2-range*0.382:price1+range*0.382; fiblevel.retrace50 =(price1<price2)?price2-range*0.500:price1+range*0.500; fiblevel.retrace61 =(price1<price2)?price2-range*0.618:price1+range*0.618; fiblevel.extension61 =(price1<price2)?price2+range*0.618:price1-range*0.618; fiblevel.extension100=(price1<price2)?price2+range :price1-range; fiblevel.extension138=(price1<price2)?price2+range*1.382:price1-range*1.382; fiblevel.extension161=(price1<price2)?price2+range*1.618:price1-range*1.618; } 处的节点应用和localhost:49160处的数据库。

但是,节点应用程序似乎无法实际连接到数据库。我尝试时收到此错误:

localhost:7474

这通常意味着它无法在该主机上找到数据库:port。

同样,我可以访问Error: connect ECONNREFUSED 127.0.0.1:7474 at Object.exports._errnoException (util.js:1018:11) at exports._exceptionWithHostPort (util.js:1041:20) at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1086:14) 并清楚地看到数据库正在运行。

我还尝试连接到127.0.0.1:7474,但这也没有用。

在Docker容器中运行本地节点应用程序+数据库时没有问题,但是当我在docker容器中运行节点应用程序时会出现此问题。

什么主机和端口应该是数据库(我应该连接到什么?),以及我可能错过或做错了什么?

node-app的Dockerfile

0.0.0.0:7474

docker neo4j run cmd

FROM node:boron

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json /usr/src/app/
RUN yarn

# Bundle app source
COPY . /usr/src/app

EXPOSE 8080
CMD [ "yarn", "start" ]

2 个答案:

答案 0 :(得分:2)

我正在描述这样做的一种方式,可能还有其他可能的方法,我目前还没有意识到。由于现在不推荐links,我们可以使用网络将一个容器连接到另一个容器。

首先,我们使用此命令创建网络:

docker network create -d bridge --subnet 172.25.0.0/16 isolated_nw

然后我们通过为我们创建的网络分配一个IP地址来连接mysql容器。是的,我们也指定了网络。此命令执行所需的目的:

docker run -itd --rm \
  --network=isolated_nw \
  --ip=172.25.3.3 \
  --name=mysql \
  --volume "$(pwd)/database/:/docker-entrypoint-initdb.d" mysql

现在我们已经运行了mysql容器并连接到我们创建的isolated_nw。是时候让我们的其他容器连接到同一个网络并访问mysql容器了。在运行容器时添加--network=isolated_nw标志会将容器添加到网络中。我们将在运行需要访问mysql的其他容器时使用此标志。

现在已经完成了!在这个其他容器内,我们可以访问我们分配的IP地址的mysql容器,即172.25.3.3。可以看到这些事情的实现here

答案 1 :(得分:-1)

(我还不能使用评论,所以请按照这种方式与您联系。如果有效则会更新)

您是否不应该将容器链接以暴露它们? Docker v17.06 docs州:

  

如果操作员在默认桥接网络中启动新客户端容器时使用--link,则客户端容器可以通过专用网络接口访问公开的端口。如果在Docker网络概述中描述的用户定义网络中启动容器时使用--link,则它将为要链接的容器提供命名别名。

我也发现这很有用(带我到文档):https://www.digitalocean.com/community/tutorials/how-to-deploy-a-node-js-and-mongodb-application-with-rancher-on-ubuntu-14-04

(阅读后你可以看看Rancher .Docker的岩石)