【问题标题】:docker-compose redis connection issuedocker-compose redis 连接问题
【发布时间】:2020-12-18 03:51:36
【问题描述】:

我一直在尝试 dockerize 一个 api 。但是redis崩溃了。 Nodejs 和 mongodb 工作。

Docker-compose.yaml 文件

version: '3'
services:

  mongo:
    container_name: mongo
    image: mongo
    networks:
      - webnet
    ports:
      - '27017:27017'
  redis: 
    image: redis
    container_name: redis
    command: ["redis-server","--bind","redis","--port","6379"]
    ports:
      - '6379:6379'
    hostname: redis

  app:
    container_name: password-manager-docker
    restart: always
    build: .
    networks:
      - webnet
    ports:
      - '80:5000'
    links: 
      - mongo
      - redis
    environment: 
      MONGODB_URI: ${MONGODB_URI}
      clientID: ${clientID}
      clientSecret : ${clientSecret}
      PORT: ${PORT}
      NODE_ENV : ${NODE_ENV}
      JWT_SECRET_KEY: ${JWT_SECRET_KEY}
      JWT_EXPIRE: ${JWT_EXPIRE}
      REFRESH_TOKEN: ${REFRESH_TOKEN}
      JWT_REFRESH_SECRET_KEY: ${JWT_REFRESH_SECRET_KEY}
      JWT_REFRESH_EXPIRE: ${JWT_REFRESH_EXPIRE}
      JWT_COOKIE: ${JWT_COOKIE}
       
networks:
  webnet:

Docker 文件

FROM node:latest

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install 

COPY . .

EXPOSE 5000

CMD ["npm","start"]

错误是 Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379。 我该如何解决这个问题?

【问题讨论】:

  • 从应用程序尝试连接到 redis:6379 而不是 127.0.0.1
  • 我试过了。但是同样的错误。Redis 连接到 6379 失败
  • 也许其他服务正在占用该端口? “docker ps”的结果是什么?
  • 有3个容器和端口 0.0.0.0:80->5000/tcp ,0.0.0.0:6379->6379/tcp (redis container) ,0.0.0.0:27017->27017/tcp
  • 您将使用command 覆盖redis 的默认CMD。如果您不弄乱用于启动容器的命令,它应该可以开箱即用。

标签: node.js mongodb docker redis docker-compose


【解决方案1】:

默认情况下,撰写文件中的所有容器都将加入一个默认网络,在那里它们可以相互通信,但是如果您指定一个网络,那么您必须为所有容器指定它。因此,您可以从应用程序和 mongo 服务中删除网络声明,也可以在 redis 服务中指定它。

【讨论】:

  • 你在哪里指定你的应用的redis连接时间?
  • 我没有指定连接时间。
  • 将主机属性添加到redis客户端配置后,它起作用了。但是我怎样才能访问api。 localhost:80 和 localhost:5000 不工作
  • 我假设当您说 api 时,您指的是您的应用服务,如果是这样,那么它应该是 localhost:80。您是否收到 404 或任何其他错误?
  • 错误是这个站点不可用。但是当我运行 docker-machine ip 并使用这个 ip 时它可以工作。例如,ip 是 192.168.10.10。我写了 url 192.168.10.10:80,然后就可以了。可以部署吗?如果没有,我该如何运行 localhost:80
猜你喜欢
  • 2018-12-31
  • 1970-01-01
  • 2020-09-19
  • 2019-03-03
  • 2020-08-26
  • 2020-06-03
  • 2019-12-10
  • 2019-10-19
  • 1970-01-01
相关资源
最近更新 更多