英文:
connection refused when trying to connect redis using docker compose file
问题
我遇到了一个问题,尝试使用redis-golang驱动程序连接到Redis。这是我的docker-compose.yml
文件:
version: "3"
services:
driver:
build: ./API-Golang
command: go run app.go
volumes:
- ./API-Golang:/app
ports:
- "8080:8080"
depends_on:
- db
- redis
links :
- redis
- db
redis:
image: redis
container_name: redis
ports: ["6379:6379"]
db:
image: mongo:3.4.2
container_name: mongodb
ports : ["27017:27017"]
这是我尝试连接到Redis的代码(API-Golang/database/allSystem.go):
redisConn := RedisHost{
Address: "localhost:6379",
Password: "",
DB: 0,
}
redisConnection, err := redisConn.Connect()
if err != nil {
panic(err)
}
我尝试将localhost
更改为redis
作为主机,但仍然无法工作。这是错误信息:
panic: dial tcp [::1]:6379: getsockopt: connection refused
goroutine 1 [running]:
github.com/Gujarats/API-Golang/database.SystemConnection(0x48)
/go/src/github.com/Gujarats/API-Golang/database/allSystem.go:32 +0x3d3
main.main()
/go/src/github.com/Gujarats/API-Golang/app.go:24 +0x34
exit status 2
有什么想法是什么出了问题?
英文:
I have a problem trying to connect to redis using redis-golang driver.
this is my docker-compose.yml
file :
version: "3"
services:
driver:
build: ./API-Golang
command: go run app.go
volumes:
- ./API-Golang:/app
ports:
- "8080:8080"
depends_on:
- db
- redis
links :
- redis
- db
redis:
image: redis
container_name: redis
ports: ["6379:6379"]
db:
image: mongo:3.4.2
container_name: mongodb
ports : ["27017:27017"]
and this the code where I try to connect to redis (API-Golang/database/allSystem.go):
redisConn := RedisHost{
Address: "localhost:6379",
Password: "",
DB: 0,
}
redisConnection, err := redisConn.Connect()
if err != nil {
panic(err)
}
I have tried to change localhost
to redis
for the host but still it doesn't work. Here is the error :
driver_1 | panic: dial tcp [::1]:6379: getsockopt: connection refused
driver_1 |
driver_1 | goroutine 1 [running]:
driver_1 | github.com/Gujarats/API-Golang/database.SystemConnection(0x48)
driver_1 | /go/src/github.com/Gujarats/API-Golang/database/allSystem.go:32 +0x3d3
driver_1 | main.main()
driver_1 | /go/src/github.com/Gujarats/API-Golang/app.go:24 +0x34
driver_1 | exit status 2
Any idea what's wrong?
答案1
得分: 1
使用depends_on时需要注意以下几点:
-
depends_on不会等待db和redis“准备就绪”再启动web服务,只会等待它们启动。如果需要等待服务准备就绪,请参考控制启动顺序以了解此问题及解决策略。
-
版本3不再支持depends_on的条件形式。
-
在使用版本3的Compose文件进行Swarm模式下的堆栈部署时,depends_on选项将被忽略。
英文:
There are several things to be aware of when using depends_on:
- depends_on will not wait for db and redis to be “ready” before starting web - only until they have been started. If you need to wait for a service to be ready, see Controlling startup order for more on this problem and strategies for solving it.
- Version 3 no longer supports the condition form of depends_on.
- The depends_on option is ignored when deploying a stack in swarm mode with a version 3 Compose file.
答案2
得分: 0
这很愚蠢,我把depends_on
写错了顺序,我修复了这个问题,像这样按顺序写:
depends_on:
- redis
- db
之前我先写了db
。不要忘记将主机更改为适当的名称,就像在docker-compose.yml文件中一样。在这种情况下,redis = redis
,mongodb = db
。
我忘记在app.go中先调用redis,然后是mongodb。
英文:
This is stupid I wrote the depends_on
not in order I fix the issue writing the order like this :
depends_on:
- redis
- db
Before this I wrote it db
first. and do not forget to change the host to appropriate name just like in the docker-compose.yml file. In this case is redis = redis
and mongodb = db
.
I forget that in app.go I call redis first then mongodb.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论