通过docker连接golang和redis

我试图通过Docker连接golang和reds,但是我没有太多的运气。 我已经在https://github.com/davidwilde/docker-compose-golang-redis/tree/stackoverflow_question发布了我的尝试,并列出了下面的日志。

Redis说它已经准备好接受连接,但是我的golang app使用gopkg.in/redis.v3说不。

~/workspace/composetest   master ●  docker-compose up Starting composetest_db_1... Starting composetest_web_1... . . . ur kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. db_1 | 1:M 20 Nov 05:58:33.371 * DB loaded from disk: 0.000 seconds db_1 | 1:M 20 Nov 05:58:33.371 * The server is now ready to accept connections on port 6379 web_1 | panic: dial tcp [::1]:6379: getsockopt: connection refused web_1 | web_1 | goroutine 1 [running]: web_1 | main.main() web_1 | /go/src/app/app.go:19 +0x131 web_1 | web_1 | goroutine 17 [syscall, locked to thread]: web_1 | runtime.goexit() web_1 | /usr/local/go/src/runtime/asm_amd64.s:1696 +0x1 web_1 | panic: dial tcp [::1]:6379: getsockopt: connection refused web_1 | web_1 | goroutine 1 [running]: web_1 | main.main() web_1 | /go/src/app/app.go:19 +0x131 web_1 | web_1 | goroutine 17 [syscall, locked to thread]: web_1 | runtime.goexit() web_1 | /usr/local/go/src/runtime/asm_amd64.s:1696 +0x1 

所以我们有两个不同的容器,这意味着在这种情况下两个不同的“本地主机”。

 client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, }) 

所以,你的应用程序正在向自己的沙箱容器发出请求,而不是向其他包含redis的“其他”沙箱容器发送请求。

你有两个select,

在像redisdb:db这样的撰写文件中给出一个映射,并传递这个信息而不是localhost。

或者,使用“–net = host”选项为您的容器提供通用networking,而无需更改您的代码。

编辑:错字