无法从Docker容器连接到redis服务器

我的docker版本是1.13.1。 我试图从我的docker容器连接到redis服务器,但我得到连接拒绝error.Detailed日志如下:

由于:redis.clients.jedis.exceptions.JedisConnectionException:java.net.ConnectException:连接在redis.clients.jedis.Connection.connect(Connection.java:207)处被拒绝[reddit.jdis]:redis中的[jedis-2.9.0.jar:] .client.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 ]在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更多原因:java.net.ConnectException:连接在java.net.PlainSocketImpl.socketConn处被拒绝 在java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)[rt.jar:1.7.0_80]上的ect(Native方法)[rt.jar:1.7.0_80]在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 )在java.net.Socket.connect(Socket.java:579)[rt.jar:1.7.0_80] [rt.jar:1.7.0_80]在redis.clients.jedis.Connection.connect(Connection.java:184 )[jedis-2.9.0.jar:] … 34更多

当我给--net="host"选项这个错误消失了,但是当我给

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

我得到的错误,虽然容器能够连接到不同的虚拟机上的Db,但不能连接到自我托pipe机器上存在的Redis服务器。

我怀疑问题是,你试图通过localhost而不是parent-host连接到redis。 确保在创buildJedis连接时通过parent-host连接到redis。

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

另外,确保在容器内的/etc/hosts中有一个parent-host