首页 > 解决方案 > 无法将节点容器连接到 redis 容器

问题描述

我正在尝试使用 Angular 作为前端、node.js 作为后端和 Postgres 作为数据库来对现有应用程序进行 dockerize。我已经创建了一个网络,并尝试在没有数据库的情况下一个一个地运行容器,但我在 node.js 后端遇到错误。

我已经用这个 Dockerfile 构建了后端映像:

FROM node:10.17.0-alpine

WORKDIR /app

COPY package*.json ./

RUN npm i

COPY . .

EXPOSE 3000

CMD node --experimental-worker backend.js

和前端有这个:

FROM node:10.17

RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get update && apt-get install -yq google-chrome-stable

WORKDIR /app

ENV PATH /app/node_modules/.bin:$PATH

COPY package.json /app/package.json
RUN npm install
RUN npm install -g @angular/cli@7.3.9

COPY . /app

EXPOSE 4200
CMD ng serve --host 0.0.0.0

我已经构建了图像并启动了容器:

docker container run --network my-network -it -p 4200:4200 frontend
docker container run --network my-network -it -p 3000:3000 backend
docker container run --network my-network -it --name my-redis -p 6379:6379 redis

但后端依赖redis启动,因此失败并出现错误:

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)

我试过了:

docker container run --network my-network --link my-redis:redis -it -p 3000:3000

但这根本没有帮助。对不起,我对 Docker 很陌生,所以任何澄清都会很有用。

标签: dockerredisdockerfile

解决方案


您的后端服务正在尝试连接到127.0.0.1:6379,但它应该是这样的my-redis:6379

基本上,您需要将 redis 主机注入后端服务。有多种方法可以这样做,但最常见的方法是从 ENV 变量中读取它(例如 REDIS_HOST=my-redis)


推荐阅读