Vagrant和Docker之间的Redis连接被拒绝

时间:2019-05-09 09:13:15

标签: docker redis vagrant

我有一个像这样的码头工人:

version: '3.5'

services:

  RedisServerA:
    container_name: RedisServerA
    image: redis:3.2.11
    command: "redis-server --port 26379"
    volumes:
      - ../docker/redis/RedisServerA:/data
    ports:
      - 26379:26379
    expose:
      - 26379

  RedisServerB:
    container_name: RedisServerB
    image: redis:3.2.11
    command: "redis-server --port 6379"
    volumes:
      - ../docker/redis/RedisServerB:/data
    ports:
      - 6379:6379
    expose:
      - 6379

现在我做一个vagrant ssh并且做

ping RedisServerA
ping RedisServerB

它们都起作用。

现在,我尝试连接到Redis服务器:

redis-cli -h RedisServerB

工作正常

然后我尝试连接到另一个

redis-cli -h RedisServerA -p 26739

它说:

Could not connect to Redis at RedisServerA:26739: Connection refused
Could not connect to Redis at RedisServerA:26739: Connection refused

两次。

我在这里想念什么?

1 个答案:

答案 0 :(得分:4)

通常,在此设置中,您将让每个容器在其“自然”端口上运行。对于来自外部Docker的连接,您需要ports:映射,并且可以通过主机IP地址上的已发布端口访问容器。对于Docker容器之间的连接(假设它们在同一网络上,并且如果使用裸docker run,则手动创建该网络),则使用容器名称和容器的内部端口号。

我们可以通过删除一些不必要的行(docker-compose.ymlcontainer_name:并没有实际效果)并让图像运行默认的{{1 }}设置为默认端口,并且仅使用expose:重新映射。我们会得到:

command:

在容器之间,您将使用默认端口

ports:

在Docker外部,您将使用服务器的主机名和已发布的端口

version: '3.5'
services:
  RedisServerA:
    image: redis:3.2.11
    volumes:
      - ../docker/redis/RedisServerA:/data
    ports:
      - 26379:6379
  RedisServerB:
    image: redis:3.2.11
    volumes:
      - ../docker/redis/RedisServerB:/data
    ports:
      - 6379:6379