为Docker容器中的服务设置固定IP并访问

  我们通常会用容器快速搭建一些服务做开发和测试,在容器外通过端口映射访问正常,当你把你自己的应用也丢到容器里面时,却报错了,因为容器里面的应用并不能通过容器外的端口映射访问到容器里面的服务.

这个时候你会第一时间想到那么我在容器里面使用IP地址让应用和服务通讯,你辛苦找到服务的IP,并想办法把服务的IP地址配置到你的应用中,应用运行正常.你以为问题得到了解决;没想到等你重启电脑后发现又不行了,

原来是服务的IP是根据你启动容器的顺序动态分配的,还是要把IP固定下拉才好解决这个问题,方法如下:

1.创建一个网络(子网掩码设置大一点,这样就有用不完的私网IP了)

docker network create --subnet=172.172.0.0/16 my_docker_net

2.启动容器的时候 指定网络和IP地址,感觉容器名字包含IP的信息会好记一点,如:

redis:

docker run -itd --name myRedis_0_5 --net my_docker_net --ip 172.172.0.5  -p 6379:6379 redis

rabbitMq:

docker run -d --hostname myRabbit --name myRabbit --net my_docker_net --ip 172.172.0.6 -p 15672:15672 -p 5672:5672 rabbitmq

docker exec -it myRabbit rabbitmq-plugins enable rabbitmq_management

指定MQ版本:

docker run -d --hostname myRabbit3.10 --name myRabbit3.10 --net my_docker_net --ip 172.172.0.7 -p 15672:15672 -p 5672:5672 rabbitmq:3.10-rc-management

docker exec -it myRabbit3.10 rabbitmq-plugins enable rabbitmq_management

docker exec -it myRabbit3.10 rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management

 

mysql:

  docker run -itd --name mysql-local --net my_docker_net --ip 172.172.0.2 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql

xxl-job-admin

docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://172.172.0.2:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=root" --net my_docker_net --ip 172.172.0.9 -p 8089:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin:2.3.1

3.这样容器就有固定的IP了,会形成如下状态:

  • 容器外面可以使用映射出的端口访问,但是不能通过指定的IP访问
  • 容器内部容器之间可以使用指定的端口访问,但无法通过容器的主机IP+映射的端口访问

这样似乎还是不方便:一个应用在容器外本来可以访问,可是丢到容器内,因为服务地址配置问题会导致不能访问,切换配置也非常麻烦,如果解决?

一个好的办法是为容器配置一个环境变量,这样容器中的应用会自动读取环境变量切换到内网的服务器地址,如:

在IDEA里面这么配置,具体命令如何写,还没有去实验

 

 

 

4.通常容器如RIDIS,默认一般没有ifconfig和 ping命令,导致无法查看本机IP地址和PING通对方IP地址,使用如下命令安装:

apt-get update 先升级apt-get,

然后安装
apt install iputils-ping
apt install net-tools
ifconfig 或者 ip addr查看的虚拟ip

 

posted @ 2022-05-10 10:04  为爱痴狂  阅读(2089)  评论(0编辑  收藏  举报