我正在尝试使用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还是很陌生,所以任何澄清都将是有用的。
答案 0 :(得分:1)
您的后端服务正在尝试连接到127.0.0.1:6379
,但是应该类似于my-redis:6379
。
基本上,您需要将redis主机注入后端服务。这样做有多种方法,但是最常见的方法是从ENV变量中读取它(例如REDIS_HOST = my-redis)