从 Vagrant 机器连接到 Redis Docker 容器

Connect to Redis Docker container from Vagrant machine

我们要从 Vagrant 搬到 Docker。

我们的首要目标是先将一些服务移出。在这种情况下,我试图在 docker 容器上托管一个 redis 服务器,并从我的流浪机器连接到它。

在 vagrant 机器上有一个 apache2 网络服务器托管一个 Laravel 应用程序

这是我正在努力解决的连接部分,目前我有

Dockerfile.redis

FROM redis:3.2.12

RUN redis-server

docker-compose.yml(串联)

version: '3'
services:
   redis:
     build:
       context: .
          dockerfile: Dockerfile.redis
       working_dir: /opt
       ports:
         - "6379:6379"

我尝试了多种连接方式:

尝试 1

在 Laravel 的配置中使用主机 IP 10.0.2.2。结果 "Connection refused"

尝试 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,而不是从流浪者中连接。

仅供参考 - 这是将 Docker 用于 Mac 和 docker 的版本 3 compose

您的尝试 1 应该确实有效。当你创建一个没有定义网络的服务时,docker-compose 会自动创建一个桥接网络。例如:

当你 运行 docker-compose up 在此:

version: '3'
services:
  redis:
    build:
      context: .
      dockerfile: Dockerfile.redis
    working_dir: /opt
    ports:
      - "6379:6379"

docker-compose创建了一个桥接网络,名称为<project name>_default,在我的例子中是docker_compose_test_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 从主机或您的 vagrant box 进行连接:

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

我们能够使用纯粹的 docker compose 实现这一点,而根本没有用于 redis 的 docker 文件:

redis:
  image: redis
  container_name: redis
  working_dir: /opt
  ports:
    - "6379:6379"

这样完成后,就可以使用

从 vagrant 文件中连接到 redis
redis-cli -h 10.0.2.2

或者如下laravel,虽然我们使用环境变量来设置这些)

'redis' => [
  'client' => 'phpredis',
  'default' => [
    'host'     => '10.0.2.2',
    'password' => null,
    'port'     => 6379,
    'database' => 0,
  ]
]