host模式启动java springboot项目打成镜像的 docker容器 访问127.0.0.1 连接redis 时 ip变成了宿主机的设备名称
如图 redis是 端口映射运行的
springboot服务 是host模式运行的
springboot项目里面 的确是访问127.0.0.1 这个ip 按理说是可以连上redis容器的
1、docker简单可认为就是一台机器,因此实际上你的应用为一个docker,redis是另一个docker,所以两台机器肯定不能用127.0.0.1访问。除非两个装在一个docker里。
2、host模式下,dcoker-redis端口自动映射到宿主机,因此docker应用访问dcoker-redis就用宿主机ip就可以了。
这里的问题 不是容器之间怎么怎么样 连不连的上 问题是 host模式启动的springboot服务里 明明是访问127.0.0.1 但是变成了 宿主机的设备名 所以应该是host模式 有什么问题 或者需要配置什么东西
不知道你这个问题是否已经解决, 如果还没有解决的话:对于这个问题,我理解的是在使用docker容器运行java springboot项目时,使用host模式启动后打成镜像,访问127.0.0.1连接redis容器时,IP地址会变成宿主机的设备名称,而需要解决这个问题。
首先,需要了解一下docker容器的网络模式和host模式,docker的网络模型有:bridge(桥接模式),host(主机模式),none(没有网络模式),container(容器模式),自定义模式等;而host模式是指直接使用宿主机的网络模式,容器将不会拥有单独的网络栈,而会和宿主机共用同一个网络栈,这就意味着容器可以直接访问宿主机上的端口,但是也导致容器的网络配置会受到宿主机上的网络配置的影响,进而导致出现这个问题。
为了解决这个问题,可以使用docker的网络模式来避免直接使用host模式。具体的解决方案如下:
docker network create -d bridge --subnet 172.18.0.0/24 redis-net
这里使用bridge模式,并指定了子网为172.18.0.0/24,这样就可以在这个自定义的网络之间通信了。
docker run --name redis --network redis-net redis:latest
注意这里的--network参数,指定了连接的网络。
spring.redis.host=redis
spring.redis.port=6379
这样就可以避免出现IP地址变成宿主机设备名称的问题了。
另外,如果还需要用到容器之间的通信,也需要将容器加入到同一个网络中,修改docker run命令的--network参数即可。
最后,这里只提供了一个可行的解决方案,具体实现还需要根据具体情况进行调整和细化。