【问题标题】:Changing Redis port in Docker Compose not working在 Docker Compose 中更改 Redis 端口不起作用
【发布时间】:2019-05-14 17:44:23
【问题描述】:

我有一个启动两个服务的 Docker Compose 文件:Redis 和 Redis Commander。使用默认的 Redis 端口 6379 可以正常工作。将Redis端口改为6380后,Redis Commander无法再连接Redis了。

错误:

setUpConnection Redis error Error: connect ECONNREFUSED 172.19.0.2:6380

这是docker-compose.yml 文件:

version: '3.7'
services:
  redis:
    container_name: redis
    hostname: redis
    image: sameersbn/redis:4.0.9-2
    ports:
      - "6380:6379"
    expose:
      - "6380"
    volumes:
      - type: volume
        source: redis-data
        target: /data
    restart: always
  redis-commander:
    container_name: redis-commander
    hostname: redis-commander
    image: rediscommander/redis-commander:latest
    restart: always
    environment:
      - REDIS_HOSTS=local:redis:6380
    ports:
      - "8082:8081"
volumes:
  redis-data: {}

我可以使用以下节点代码在端口 6380 上连接到 Redis:

import redis from 'redis'

const config = {
  host: '127.0.0.1',
  port: 6380,
  no_ready_check: true
}

const client = redis.createClient(config.port, config.host)

client.set('expireName', 'nidkil', (err, reply) => {
  if (err) {
    console.error('Error occurred:', err)
  } else {
    console.log('Response:', reply)
  }
})

如果我在docker-compose.yml 中将端口改回6379,那么Redis Commander 可以连接。

有什么建议可以让 Redis Commander 在端口 6380 上连接到 Redis?

【问题讨论】:

    标签: docker redis docker-compose


    【解决方案1】:

    @Mihai 的回答帮助我找到了解决方案。我需要更改运行 Redis 的端口以及暴露的端口。这是工作的 Docker 撰写文件。

    version: '3.7'
    services:
      redis:
        container_name: redis
        hostname: redis
        image: sameersbn/redis:4.0.9-2
        command: --port 6380
        ports:
          - "6380:6380"
        expose:
          - "6380"
        volumes:
          - type: volume
            source: redis-data
            target: /data
        restart: always
      redis-commander:
        container_name: redis-commander
        hostname: redis-commander
        image: rediscommander/redis-commander:latest
        restart: always
        environment:
          - REDIS_HOSTS=local:redis:6380
        ports:
          - "8082:8081"
    volumes:
      redis-data: {}
    

    【讨论】:

    • 我只是在回复。做得好!我认为您也可以仅自定义“命令:--port 6380”而不是整个入口点。在我看来会更好。
    • 完成 :-) 更简洁。谢谢。
    • 谢谢。我只是添加了命令--port 6379,它甚至可以使用官方的redis 图像。
    【解决方案2】:

    您更改了主机上的公开端口。您没有更改容器中的内部端口。您的 redis 实例继续在默认端口 (6379) 上运行。

    也可以省略这条语句expose: - "6380",因为它没有用。

    【讨论】:

    • 如何在不更改Dockerfile的情况下更改容器的内部端口?
    • 这高度依赖于实际服务的配置;它可能是命令行参数或配置设置。这是使用 Docker 的主要好处之一。您可以让服务在其“正常”端口上运行,并且由于 Docker 的网络隔离,它不会与其他服务发生冲突。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2016-12-14
    相关资源
    最近更新 更多