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