从Vagrant机器连接到Redis Docker容器

从Vagrant机器连接到Redis Docker容器,docker,redis,docker-compose,vagrant,Docker,Redis,Docker Compose,Vagrant,我们要从流浪汉搬到码头工人 我们的第一个目标是先把一些服务搬出去。在本例中,我试图在docker容器上托管一个redis服务器,并从我的vagrant机器连接到它 在流浪者的机器上有一个apache2 Web服务器,它承载着一个Laravel应用程序 这是我正在挣扎的连接部分,目前我有 Dockerfile.redis FROM redis:3.2.12 RUN redis-server docker-compose.yml(连接) 我已经尝试了各种方式来连接: 尝试1 在Laravel的配

我们要从流浪汉搬到码头工人

我们的第一个目标是先把一些服务搬出去。在本例中,我试图在docker容器上托管一个redis服务器,并从我的vagrant机器连接到它

在流浪者的机器上有一个apache2 Web服务器,它承载着一个Laravel应用程序

这是我正在挣扎的连接部分,目前我有

Dockerfile.redis

FROM redis:3.2.12

RUN redis-server
docker-compose.yml(连接)

我已经尝试了各种方式来连接:

尝试1

在Laravel的配置中使用主机ip
10.0.2.2
。导致“连接被拒绝”

尝试2

在docker compose中设置网络

redis:
  build:
    context: .
    dockerfile: Dockerfile.redis
  working_dir: /opt
  network:
    - app_net:
        ipv4_address: 172.16.238.10
  ports:
    - "6379:6379"

networks:
  app_net:
    driver: bridge
  ipam:
    driver: default
      - subnet: 172.16.238.0/24
这反而会导致超时。大多数解决方案似乎需要在网络上配置网关,但这在docker compose 3中是不可配置的。有没有办法解决这个问题

如果有人能提供任何指导,这将是伟大的,大多数指南谈到连接到码头工人在一个流浪汉,而不是从一个


仅供参考-这是使用Docker for Mac和Docker compose的第3版,您的尝试1应该可以正常工作。当您在不定义网络的情况下创建服务时,docker compose会自动创建网桥网络。例如:

redis:
  build:
    context: .
    dockerfile: Dockerfile.redis
  working_dir: /opt
  network:
    - app_net:
        ipv4_address: 172.16.238.10
  ports:
    - "6379:6379"

networks:
  app_net:
    driver: bridge
  ipam:
    driver: default
      - subnet: 172.16.238.0/24
当您在此上运行
docker compose up
时:

version: '3'
services:
  redis:
    build:
      context: .
      dockerfile: Dockerfile.redis
    working_dir: /opt
    ports:
      - "6379:6379"
docker compose
创建一个名为
\u default
的网桥网络,在我的例子中,它是
docker\u compose\u test\u default
,如下所示:

me@myshell:~/docker_compose_test $ docker network ls
NETWORK ID          NAME                          DRIVER              SCOPE
6748b1ea4b85        bridge                        bridge              local
4601c6ea30c3        docker_compose_test_default   bridge              local
80033acaa6e4        host                          host                local
检查容器时,可以看到已为其分配了IP:

docker inspect e6b196f952af
...
        "Networks": {
            "bridge": {
                ...
                "Gateway": "172.18.0.1",
                "IPAddress": "172.18.0.2",
然后,您可以使用此IP从主机或您的漫游箱进行连接:

me@myshell:~/docker_compose_test $ redis-cli -h 172.18.0.2 -p 6379
172.18.0.2:6379> ping
PONG

我们能够使用纯docker compose实现这一点,而完全没有redis的dockerfile:

redis:
  image: redis
  container_name: redis
  working_dir: /opt
  ports:
    - "6379:6379"
一旦这样做了,就可以使用

redis-cli -h 10.0.2.2
或者如以下在laravel中所述,尽管我们使用环境变量来设置这些)


嗨,谢谢你的建议。不幸的是,这只会在主机或vagrant的连接超时中解决,这可能是我的redis而不是docker的问题吗?容器中的docker日志是否显示redis正在所需端口上运行和侦听?在终端窗口中,我想这显示了与日志相同的细节你可能会遇到这个问题:你的首席技术官回来并在5分钟内解决这个问题的乐趣哈哈。我会在下面发布解决方案
'redis' => [
  'client' => 'phpredis',
  'default' => [
    'host'     => '10.0.2.2',
    'password' => null,
    'port'     => 6379,
    'database' => 0,
  ]
]