无法将节点容器连接到Redis容器

时间:2019-11-05 10:18:10

标签: docker redis dockerfile

我正在尝试使用Angular作为前端,将node.js作为后端以及将Postgres作为数据库来对现有应用进行docker化。我已经创建了一个网络,并试图在没有数据库的情况下逐个运行容器,但是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还是很陌生,所以任何澄清都将是有用的。

1 个答案:

答案 0 :(得分:1)

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

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