docker - 无法将节点容器连接到 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 很陌生,所以任何澄清都会很有用。
解决方案
您的后端服务正在尝试连接到127.0.0.1:6379
,但它应该是这样的my-redis:6379
。
基本上,您需要将 redis 主机注入后端服务。有多种方法可以这样做,但最常见的方法是从 ENV 变量中读取它(例如 REDIS_HOST=my-redis)
推荐阅读
- javascript - 用函数中的变量反应内联样式
- php - 如何使用 PHP switch 语句在数据库中插入值
- hadoop - 我在 centos7 上安装了 Hadoop 3.2.1 和 hadoop 顶部安装 hive 并收到错误
- python - 如何使用颜色栏中的 z 值生成线性颜色图 (cplot)
- php - 使用 .htaccess 删除 .php 文件的扩展名
- algorithm - Minimax 递归备份树
- ready-api - 有什么方法可以在 ReadyAPI 测试用例期间检索数据库生成的创建记录的 id?
- python - 计算变化时如何考虑不同的日期
- c# - ASP.NET FriendlyURLS 路由,url 中间有值
- android - 访问回收站/列表视图中的所有(包括不可见的)视图