从Vagrant机器连接到Redis Docker容器

时间:2018-07-27 15:04:33

标签: docker redis docker-compose vagrant

我们正在从Vagrant迁移到Docker。

我们的首要目标是首先淘汰某些服务。在这种情况下,我试图将Redis服务器托管在Docker容器上,并从无业游民的机器连接到它。

在无业游民的计算机上,有一个托管Laravel应用程序的apache2网络服务器

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

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。导致“连接被拒绝”

尝试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 for Mac和docker compose的第3版

2 个答案:

答案 0 :(得分:1)

我们完全可以使用docker compose来实现此目的,而根本没有用于redis的dockerfile:

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

完成此操作后,便可以使用

从无业游民的文件中连接到Redis。
redis-cli -h 10.0.2.2

或者在laravel中,如下所示,尽管我们使用环境变量进行设置)

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

答案 1 :(得分:0)

您的尝试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从主机或无聊的盒子进行连接:

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