检查/连接到从Java(Spring Boot)或Node.js的docker中运行的Redis

我用Redis在Windows PC上快速入门

docker run -p 6379:6379 redis 

(Redis没有Windows发行版, fork for Windows不是最新版本)

 1:C 10 Sep 08:17:03.635 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.2.3 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 1 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' ... 1:M 10 Sep 08:17:03.644 * The server is now ready to accept connections on port 6379 

然后,但是我无法从Spring Boot应用程序连接。 与像application.properties

 spring.redis.host=localhost spring.redis.port=6379 

有错误

 Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect at redis.clients.jedis.Connection.connect(Connection.java:164) ~[jedis-2.8.2.jar:na] at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:80) ~[jedis-2.8.2.jar:na] at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1677) ~[jedis-2.8.2.jar:na] at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:87) ~[jedis-2.8.2.jar:na] at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868) ~[commons-pool2-2.4.2.jar:2.4.2] at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435) ~[commons-pool2-2.4.2.jar:2.4.2] at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363) ~[commons-pool2-2.4.2.jar:2.4.2] at redis.clients.util.Pool.getResource(Pool.java:49) ~[jedis-2.8.2.jar:na] ... 23 common frames omitted Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_45] at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_45] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345) ~[na:1.8.0_45] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_45] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_45] at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_45] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_45] at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_45] at redis.clients.jedis.Connection.connect(Connection.java:158) ~[jedis-2.8.2.jar:na] ... 30 common frames omitted 

当试图使用Node.js和node_redis的例子,我得到了

 Error Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 

正如你所提到的(在评论中),redis将protected-mode设置为yes的图像捆绑在一起( 参见这里 )。

如何绕过保护模式

  • 1)只要禁用保护模式,从服务器运行的同一主机连接到Redis,从回送接口发送命令“CONFIG SET保护模式no”,但如果这样做,则不能从互联网公开访问。 使用CONFIG REWRITE使此更改永久。
  • 2)或者,您可以通过编辑Redisconfiguration文件并将保护模式选项设置为“no”来禁用保护模式,然后重新启动服务器。
  • 3)如果您只是为了testing而手动启动服务器,请使用“ – 保护模式否”选项重新启动服务器。
  • 4)设置绑定地址或authentication密码。

来源: redis-github

build立你自己的形象

  • 你可以创build你自己的图像,通过拉Redis和添加你自己的redis.conf到图像?
  • 或更新Dockerfile中的启动命令以禁用保护模式: CMD [ "redis-server", "--protected-mode", "no" ]

你也可以看看这个包含上面提到的修改的Dockerfile (最后一行): https : //github.com/docker-library/redis/blob/23b10607ef1810379d16664bcdb43723aa007266/3.2/Dockerfile

这个Dockerfile 在github上的Redis问题中提供,它用CMD [ "redis-server", "--protected-mode", "no" ]代替启动命令。 你可以下载这个Dockerfile并input:

 $ docker build -t redis-unprotected:latest . $ docker run -p 6379:6379 redis-unprotected 

感谢Alex在https://github.com/docker-library/redis/issues/74上的回复和评论
我能够使用全IP 192.168.99.100:6379连接到Redis

请注意,最新的3.2图像已禁用保护模式https://github.com/docker-library/redis/issues/75