通过Docker连接Golang和Redis

Mr *_*lde 4 go redis docker docker-compose

我正在尝试使用docker-compose通过Docker连接golang和reds,但运气不佳。我已经在https://github.com/davidwilde/docker-compose-golang-redis/tree/stackoverflow_question上发布了我的尝试,并在下面列出了日志。

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

 ~/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
Run Code Online (Sandbox Code Playgroud)

Gla*_*mir 6

因此,在这种情况下,我们有两个不同的容器,这意味着两个不同的“ localhost”。

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

因此,您的应用正在向其自己的沙盒容器发出请求,而不是向包含redis的“其他”沙盒容器发出请求。

您有两个选择;

在您的撰写文件(如redisdb:db)中提供映射,然后传递该信息而不是localhost。

或者,使用“ --net = host”选项以便在不更改代码的情况下为您的容器提供通用网络。

编辑:错别字

  • [github上的工作版本](https://github.com/davidwilde/docker-compose-golang-redis/tree/stackoverflow_answer) (3认同)
  • 非常感谢。我只是将app.go更改为Addr:“ db:6379”, (2认同)