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

Docker is not exposing application outside container when used host network mode however it works well within container

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

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

docker 运行 --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: 无法从池中获取资源 在 org.springframework.data.redis.connection.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:连接被拒绝(Connection refused) 在 java.base/java.net.PlainSocketImpl.socketConnect(本机方法)

注意:我是 运行 docker 容器 windows 机器

我有redis和应用容器运行ning 所以这是解决方案

1:redis 在 6379 上 运行ning docker 运行 --rm -it --name redis -p 6379:6379 redis

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

docker 运行 --rm -d --link redis --name reader -p 8086:8086 imageName:version

我可以从浏览器访问应用程序http://localhost:8086 这里 --link redis 做 redis host 的映射。