docker 上運行 Laravel queue 遇到 Redis 拒絕連線的問題

我本機的 laravel (5.6) 環境是透過 docker 建立起來的,
這幾天想開始用 Queue 的功能,

env 的設定如下
QUEUE_DRIVER=database
REDIS_HOST=redis
REDIS_PORT=6379

database.php 設定如下
‘client’ => ‘predis’,

問題點:
1.
執行 php artisan queue:listen 後,有看到任務被執行完畢
[2020-02-27 15:47:30][6465] Processing: App\Jobs\test
[2020-02-27 15:47:30][6465] Processed: App\Jobs\test

本來以為已經完成,結果到 log 查看,發現有錯
2020-02-27 17:24:58] local.ERROR: php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known [tcp://redis:6379]

2.
執行 php artisan queue:work 後,也是直接看到
php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known [tcp://redis:6379]

3.
進到 docker redis 的 container 使用 redis-cli ,也是被拒絕連線

想請問一下我究竟哪些環節出了錯誤呢?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 14

检查一下redis的配置文件是否设置了ip绑定,如果有,将其去掉,然后配置密码,即设置requirepass的值。最后修改laravel环境配置中redis的密码

4年前 评论

你 env 中配置为 REDIS_HOST=redis

错误提示为 or not known [tcp://redis:6379]

,,,,,那么,env 中的配置不应该是 REDIS_HOST=127.0.0.1 吗?

4年前 评论

@tsin 謝謝你,我稍晚確認一下
@largezhou 我設定過 redid,127.0.0.1,localhost都一樣不行

4年前 评论

试试将配置项REDIS_HOST=redis修改为REDIS_HOST=宿主机IP,因为redis你是在一个单独的容器中,redis是需要通过宿主机映射端口才能访问

4年前 评论

redis容器可以这样访问

Laravel

4年前 评论

我剛剛進了 docker redis 的 redis.conf 設定党內查看,發現裡面有設定 bind redis 我試著更改成我本幾的 ip 及 127.0.0.1 或 0.0.0.0 還是都不行

4年前 评论

@ohmygod 各个容器需要在同一网络下才行,建议使用docker-compose编排,需要通讯的容器指定同一个网络。另外修改配置后注意清除laravel缓存。

4年前 评论

@ohmygod 你好,你可以像下面这样测试一下是否可以访问,如果可以,然后在laravel中配置REDIS_HOST=172.17.0.1再试试

file

4年前 评论

@wonderful60
若進到 docker redis container 內去設定的話可以連線成功,但只要改了 env 的 REDIS_HOST ,我整個網頁也會一起掛掉,我納悶的是,既然我的網站有吃到 redis 設定,為什麼我透過 laravel 的 queue 卻連不上 redis 呢?

4年前 评论

QUEUE_DRIVER=database应该配置QUEUE_DRIVER=redis,是贴错了吗?

4年前 评论

我目前的設定,前半段的 redis 對 queue 的連線看起來是可以了,不會跳錯,但我的方法有點怪,我是直接用 ifconfig 查到 ip 拿來設定在 REDIS_HOST 這樣本機跟 docker redis 就可以互通,但我不知道這樣是不是最好的方法。

@wonderful60 我去檢查一下 QUEUE_DRIVER 的設定

4年前 评论

@wonderful60 我設定了 redis or database 兩個都可以跑,目前就是要改 redis_host 讓我覺得不太方便

4年前 评论

後來解決的方式是,不要透過本機去執行 queue work , 而是要進到 docker 裡面執行 queue work 就可以了

3年前 评论

REDIS_HOST=redis容器名字, 我用docker-compose编排

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!