无法从Docker容器连接到Redis服务器 [英] Not able to connect to redis server from docker container

查看:140
本文介绍了无法从Docker容器连接到Redis服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的docker版本是1.13.1.我正在尝试从Docker容器连接到Redis服务器,但出现连接被拒绝错误.详细日志如下:

My docker version is 1.13.1. I am trying to connect to redis-server from my docker container,but I am getting connection refused error.Detailed logs are given below:

产生者:redis.clients.jedis.exceptions.JedisConnectionException:java.net.ConnectException:连接被拒绝在redis.clients.jedis.Connection.connect(Connection.java:207)[jedis-2.9.0.jar:]在redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93)[jedis-2.9.0.jar:]在redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767)[jedis-2.9.0.jar:]在redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106)[jedis-2.9.0.jar:]在org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:888)[commons-pool2-2.4.3.jar:2.4.3]在org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:432)[commons-pool2-2.4.3.jar:2.4.3]在org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361)[commons-pool2-2.4.3.jar:2.4.3]在redis.clients.util.Pool.getResource(Pool.java:49)[jedis-2.9.0.jar:]... 27更多原因:java.net.ConnectException:连接被拒绝在java.net.PlainSocketImpl.socketConnect(本机方法)[rt.jar:1.7.0_80]在java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)[rt.jar:1.7.0_80]在java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)[rt.jar:1.7.0_80]在java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)[rt.jar:1.7.0_80]在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)[rt.jar:1.7.0_80]在java.net.Socket.connect(Socket.java:579)[rt.jar:1.7.0_80]在redis.clients.jedis.Connection.connect(Connection.java:184)[jedis-2.9.0.jar:]...另外34个

Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused at redis.clients.jedis.Connection.connect(Connection.java:207) [jedis-2.9.0.jar:] at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93) [jedis-2.9.0.jar:] at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767) [jedis-2.9.0.jar:] at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106) [jedis-2.9.0.jar:] at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:888) [commons-pool2-2.4.3.jar:2.4.3] at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:432) [commons-pool2-2.4.3.jar:2.4.3] at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361) [commons-pool2-2.4.3.jar:2.4.3] at redis.clients.util.Pool.getResource(Pool.java:49) [jedis-2.9.0.jar:] ... 27 more Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) [rt.jar:1.7.0_80] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) [rt.jar:1.7.0_80] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) [rt.jar:1.7.0_80] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) [rt.jar:1.7.0_80] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) [rt.jar:1.7.0_80] at java.net.Socket.connect(Socket.java:579) [rt.jar:1.7.0_80] at redis.clients.jedis.Connection.connect(Connection.java:184) [jedis-2.9.0.jar:] ... 34 more

当我给出-net ="host" 选项时,此错误消失了,但是当我给出

when i give --net="host" option this error is gone,but when i give

--add-host=parent-host:`ip route show | grep docker0 | awk '{print \$9}'`

我得到了错误,尽管容器能够连接到不同VM上的Db,但不能连接到自托管计算机上的redis-server.

I get the error,although the container is able to connect to Db on a different VM,but not connecting to redis-server present on self hosting machine.

推荐答案

我怀疑问题是您正在尝试通过 localhost 而不是 parent-host .创建Jedis连接时,请确保通过 parent-host 连接到Redis.

I suspect the problem is that you are trying to connect to redis via localhost rather than parent-host. Make sure that you are connecting to redis via parent-host when creating the Jedis connection.

-net = host 选项起作用的原因是,在这种情况下, localhost 将引用主机的IP,而不是容器的IP.

The reason --net=host option works, is that in this case localhost will refer to the IP of the host machine and not to that of the container.

此外,请确保容器内/etc/hosts 中的 parent-host 有一个实体.

Also, make sure that there is an enty for parent-host in /etc/hosts inside the container.

这篇关于无法从Docker容器连接到Redis服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆