无法使用Redis连接到单独的Docker容器

I have redis exposed via a container:

service_redis 0.0.0.0:6379->6379/tcp

And I can even connect to it via redis-cli command with. But what I actually can't do, is to connect to via Go code (which also exists in a separate container, btw)

Here's how my client looks like:

opts := &redis.Options{
    Addr: addr,
    Password: pass,
    DB: db,
}


cli := redis.NewClient(opts)
fmt.Println(master.Ping().Err())
fmt.Println(slave.Get("REAL_KEY").String())

I've tried to put in the addr variable the following:

  1. 0.0.0.0:6379 AND 127.0.0.1:6379. The response was e.g.:
<nil>
get REAL KEY: dial tcp 0.0.0.0:6379: connect: connection refused
  1. service_redis:6379 with the following response:

<nil>
get REAL KEY: dial tcp: lookup service_redis on 169.254.169.254:53: no such host

How can I solve the problem and what did I wrong?

douchensou6495
douchensou6495 由于您可以使用redis-cli进行连接,因此您的Redis在127.0.0.1:6379上本地运行。但是,如果您使用的是Docker,则应使用Docker网络。如果您使用的是docker-compose,则可以使用网络名称进行连接:类似于redis:6379。如果是k8s,则应使用k8sDNS约定-kubernetes.io/docs/concepts/services-networking/dns-pod-service
一年多之前 回复
dphg63476
dphg63476 似乎是一个很好的提示。我能否获得无法访问k8s本身的名称空间?
一年多之前 回复
douping3891
douping3891 您能告诉我Redis是什么名称空间吗?如果与您连接的网址不同,则需要使用名称空间来构造网址
一年多之前 回复
duanpa5237
duanpa5237 不。老实说,我无法使用k8s,但是我的队友说,redis在其中。但是目前,我的w/go容器不是。所以不是同一个豆荚
一年多之前 回复
dongpo2340
dongpo2340 我假设这是Kubernetes,您是否从同一名称空间进行连接?
一年多之前 回复

2个回答



您可以使用类似的</ p>

docker-compose.yaml </ code > </ p>

  web:
构建:。
working_dir:/ go / src
端口:
-“ 5000:5000”
卷:
-。 :/ go / src
链接:
-db
db:
图片:redis
端口:
-“ 6379:6379”
</ code> </ pre>

它在您的容器之间创建了一个链接,以便它们可以相互通信。
如果您不想使用 docker-compose.yaml </ code>,则可以使用-link </ code> 建立图片时标记</ p>
</ div>

展开原文

原文

You could use something like this

docker-compose.yaml

web:
    build: .
    working_dir: /go/src
    ports:
     - "5000:5000"
    volumes:
     - .:/go/src
    links:
     - db
db:
    image: redis
    ports:
     - "6379:6379"

Its creating a link between you containers so they can communicate to eachother. If you don't want to use docker-compose.yaml then you could use the --link flag when building your image



Kubernetes将使发现变得简单。 我已经编写了一个redis复制,并通过去redis的读写操作对k8s配置进行故障转移。 检查https://github.com/kubesure/premium </ p>
</ div>

展开原文

原文

Kubernetes would make the discovery simple. I have written a redis replication and fail over k8s config with read write in go to redis. check https://github.com/kubesure/premium

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问