尝试使用docker compose文件连接redis时连接被拒绝

时间:2017-03-27 06:42:50

标签: docker go docker-compose

尝试使用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主机,但它仍然无法正常工作。这是错误:

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

知道什么是错的吗?

Source Code

2 个答案:

答案 0 :(得分:1)

使用depends_on时需要注意几点:

  • depends_on不会等到db和redis在启动web之前“准备好” - 只有在它们启动之前。如果您需要等待服务准备就绪,请参阅Controlling startup order以获取有关此问题的更多信息以及解决此问题的策略。
    • 版本3不再支持depends_on的条件形式。
  • 使用版本3撰写文件的deploying a stack in swarm mode时,将忽略depends_on选项。

答案 1 :(得分:0)

这是愚蠢的我写depends_on而不是为了解决编写这样的命令的问题:

depends_on:
  - redis
  - db

在此之前我先写了db。并且不要忘记将主机更改为适当的名称,就像在docker-compose.yml文件中一样。在这种情况下,redis = redis和mongodb = db

我忘了在app.go中我首先调用redis然后mongodb。