使用主机网络模式时,Docker 不会在容器外部公开应用程序,但它在容器内运行良好



我有一个在内部调用 redis 的 spring 启动应用程序。 我在 docker 容器内的 6379 上运行了 redis(也可以通过 redis 客户端在容器外部访问( 但是当我公开应用程序如下时,它抱怨 redis 连接失败 . 在 8086 上运行

docker run -d --name containerName -p 8086:8086 container名称:版本但是应用程序可以从浏览器访问,http://localhost:8086 但是,当像下面这样使用 --net=host 运行时,它可以正常工作,并发出警告 警告:使用主机网络模式时,已发布的端口将被丢弃

docker run --rm -it -d --net=host --publish-all=true --name containerName containerName:version

但是应用程序无法从浏览器 http://localhost:8086

访问异常堆栈跟踪

线程"pool-2-thread-1"中的异常 org.springframework.data.redis.RedisConnectionFailureException:无法获取 Jedis 连接;嵌套异常是 redis.clients.jedis.exceptions.JedisConnectionException:无法从池中获取资源 at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:282( at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:476( at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:134(

由以下原因引起:java.net.ConnectException:连接被拒绝(连接被拒绝(at java.base/java.net.PlainSocketImpl.socketConnect(Native Method(

注意:我在窗口机器上运行码头工人容器

我有 redis 和应用程序容器分开运行 所以这是解决方案

1:Redis 在 6379 上运行 Docker run --rm -it --name Redis -p 6379:6379 Redis

2:我的服务在后台使用 redis 需要将 redis 主机配置为 spring.redis.host=redis 这里 Redis 只不过是 Redis 容器的名称

docker run --rm -d --link redis --name reader -p 8086:8086 imagename:version

我可以从浏览器访问该应用程序 http://localhost:8086 这里 --Link Redis 对 Redis 主机进行映射。

相关内容

最新更新