Docker容器之间互相访问

avatar 2020年1月30日22:30:01 评论 23 views

本文介绍一个 docker 容器如何访问另一个 docker 容器

如我这里写了一个名为 redis-demo 的 Springboot 项目,这个项目里需要访问 redis

配置文件 application.yml 部分内容如下

spring:
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379

 

先创建一个名称为 redis-server 的容器

docker run --name redis-server -p 6379:6379 -d redis

然后用IDEA 的 docker 插件构建一个镜像,并创建容器

docker run --name redis-demo -p 8080:8080 -d  saysky/redis-demo

 

通过地址栏访问项目,发现报错,提示 Redis 连接失败

Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1:6379

 

解决办法

通过别名和--link解决

1、配置文件中的 ip 地址改成容器别名

spring:
  redis:
    database: 0
#    host: 127.0.0.1
    host: redis-server
    port: 6379

 

2、创建 redis-demo 容器加 --link redis-server

docker run --name redis-demo -p 8080:8080 -d --link redis-server saysky/redis-demo

 

删除之前的容器和镜像,重新构建镜像和创建容器

测试,发现 redis-demo 项目能正常连接 redis

 

原因

我们发现添加 --link redis-server 后

会在该容器的 hosts 里自动添加一条记录

即将 redis-server 绑定到 172.17.0.3

历史上的今天
一月
30
  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: