Docker撰写文件时Redis连接失败

时间:2018-01-03 21:03:55

标签: docker redis docker-compose

我正在使用来自开源代码库的docker-compose文件。值得注意的是,它缺少versionservices键,但它仍然有效(直到现在,我还没有看到没有这些键的撰写文件)。

redis:
  image: redis
  ports:
    - '6379'
app:
   build: .
   environment:
     - LOG_LEVEL='debug'
   links:
     - redis

docker-compose up启动所有内容,应用程序可以通过127.0.0.1:6379与redis对话。

但是,当我重新添加versionservices密钥时,会拒绝与redis的连接:

version: '3'
services:
  redis:
    image: redis
    ports:
      - '6379'
  app:
    build: .
    environment:
      - LOG_LEVEL='debug'
    links:
      - redis

结果是:

[Wed Jan 03 2018 20:51:58 GMT+0000 (UTC)] ERROR { Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at Object.exports._errnoException (util.js:896:11)
    at exports._exceptionWithHostPort (util.js:919:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1073:14)
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 6379 }

为什么添加version: '3'services:会导致无法连接?

4 个答案:

答案 0 :(得分:1)

您无需在同一网络(撰写文件)中指定端口和服务链接。您可以使用:

version: '3'
services:
  redis:
    image: redis
  app:
    build: .
    environment:
      - LOG_LEVEL='debug'

然后在您的应用代码中将redis称为'redis:6379'。如果你看到redis image的Dockerfile,你可以看到端口已经暴露在最后。

答案 1 :(得分:0)

如果要将服务公开给特定主机端口,请在Docker Compose版本3中使用以下语法:

ports:
  - '6379:6379'

检查文档here

  

指定两个端口(HOST:CONTAINER),或仅指定容器端口   (将选择随机主机端口。)

答案 2 :(得分:0)

在遇到相同问题后,这对我有用:

docker-compose.yml

version: "3"
    services:
      server:
        ...
        depends_on:
          - redis
      redis:
        image: redis

我的redis配置文件:

const redis = require('redis');

const redisHost = 'redis';
const redisPort = '6379';
let client = redis.createClient(redisPort, redisHost);

client.on('connect', () => {
  console.log(`Redis connected to ${redisHost}:${redisPort}`);
});

client.on('error', (err) => {
  console.log(`Redis could not connect to ${redisHost}:${redisPort}: ${err}`);
});

module.exports = client;

答案 3 :(得分:0)

该端口可能正在使用中。使用它杀死该容器,或者重新启动docker会释放该端口。