我有一个spring启动应用程序,它在内部调用redis。我在docker容器内的6379上运行redis(也可以通过redis客户端在容器外访问),但是当我像下面那样公开应用程序时,它会抱怨redis连接失败。在8086上运行
docker run-d--名称containername-p 8086:8086 containername:version but 可以通过浏览器访问应用程序http://localhost:8086但是,当使用--net=host按如下方式运行时,它可以很好地工作,警告为警告:使用主机网络模式时,已发布的端口将被丢弃
docker运行--rm-it-d--net=host--publish all=true--name containernameainername:version
但应用程序无法从浏览器访问http://localhost:8086
异常堆栈跟踪
线程“pool-2-thread-1”org.springframework.data.redis.redisconnectionfailureexception异常:无法获取jedis连接;嵌套异常为redis.clients.jedis.exceptions.jedisconnectionexception:无法从org.springframework.data.redis.connection.jedis.jedis.jedisconnectionfactory.fetchjedisconnector(jedisconnectionfactory)的池中获取资源。java:282)在org.springframework.data.redis.connection.jedis.jedisconnectionfactory.getconnection(jedisconnectionfactory)。java:476)在org.springframework.data.redis.core.redisconnectionutils.dogetconnection(redisconnectionutils。java:134)
原因:java.net.connectexception:在java.base/java.net.plainsocketimpl.socketconnect(本机方法)处拒绝连接(拒绝连接)
注意:我正在windows计算机上运行docker容器
1条答案
按热度按时间gj3fmq9x1#
我有redis和应用程序容器分别运行,所以这里是解决方案
1:redis正在6379 docker run--rm-it--name redis-p 6379:6379 redis上运行
2:我的服务在后台使用redis,需要配置redis host为spring.redis.host=redis,这里redis就是redis容器的名称
docker run--rm-d--link redis--name reader-p 8086:8086imagename:version
我可以从浏览器访问应用程序http://localhost:8086这里——link redis做redis主机的Map。