如何将Node.js应用程序连接到独立的Docker容器中的数据库?

我有这些容器运行:

在这里输入图像说明

按照预期,我可以访问localhost:49160节点应用程序和localhost:7474数据库。

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

 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) 

这通常意味着它无法在该主机:端口find数据库。

再次,我可以访问127.0.0.1:7474并清楚地看到数据库正在运行。

我也试图连接到0.0.0.0:7474 ,但是也没有工作。

当我在Docker容器中运行本地节点应用程序+数据库时,没有任何问题,但是当我也在泊坞窗容器中运行节点应用程序时,会发生此问题。

什么主机和端口应该是可用的数据库(我应该连接到什么?),我可能失踪或做错了什么?

节点应用程序的Dockerfile

 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" ] 

docker工人neo4j运行cmd

 docker run -d -e NEO4J_AUTH=none \ --publish=7474:7474 --publish=7687:7687 \ --volume=$HOME/neo4j/data:/data \ --volume=$HOME/neo4j/logs:/logs \ --volume=$HOME/neo4j/conf:/conf \ --volume=$HOME/neo4j/plugins:/plugins \ neo4j:3.1.4 

我正在描述一种做法,可能还有其他可能的方法,目前我还没有意识到。 由于现在links已被弃用,我们可以使用networking将一个容器连接到另一个容器。

首先我们用这个命令创build一个networking:

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

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

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

现在我们已经运行了mysql容器并连接到我们创build的isolated_nw 。 其时间让我们的其他容器连接到同一个networking,并访问MySQL容器。 在运行容器时添加--network=isolated_nw标志将容器添加到networking。 而我们将使用这个标志,而运行我们的另一个需要访问MySQL的容器。

现在完成了! 在这个其他容器里,我们可以在我们分配的IP地址上访问mysql容器,也就是172.25.3.3。 这里可以看到这些东西的实现。

(我目前还不能使用评论,所以以这种方式达到目的,如果有效,将会更新)

你不应该链接容器来暴露他们吗? Docker v17.06文档状态:

如果运营商在默认网桥networking中启动新客户端容器时使用--link ,则客户端容器可以通过专用networking接口访问公开的端口。 如果在Dockernetworking概述中描述的在用户定义的networking中启动容器时使用了--link ,它将为所链接的容器提供一个命名别名。

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

(你可以在看完Rancher后看看Docker的Rocks)