gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:54:14 25 4
gpt4 key购买 nike

我正在运行这些容器:

enter image description here

我能够按预期访问 localhost:49160 处的 Node 应用程序和 localhost:7474 处的数据库。

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

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 并清楚地看到数据库正在运行。

我还尝试连接到 0.0.0.0:7474,但也不起作用。

当我在本地运行 Node 应用程序 + docker 容器中的数据库时没有问题,但当我也在 docker 容器中运行 Node 应用程序时,就会出现此问题。

数据库应该在什么主机和端口上可用(我应该连接到什么?),我可能遗漏了什么或做错了什么?

Node 应用程序的 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

最佳答案

我正在描述一种方法,可能还有其他我目前不知道的可能方法。由于链接现已弃用,我们可以使用网络将一个容器连接到另一个容器。

首先,我们使用以下命令创建一个网络:

docker网络创建-d网桥--subnet 172.25.0.0/16isolated_nw

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

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 地址(即 172.25.3.3)访问 mysql 容器。这些东西的实现可以参见 here .

关于node.js - 当 Node.js 应用程序在单独的 Docker 容器中运行时,如何将它们连接到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45195909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com