Docker 同一主机不同容器之间的通信

时间:2024-04-07 21:32:28

前言

解决问题:解决同一主机不同容器之间的通信
当在本机运行一个web的镜像,想要访问mysql镜像的时候如果使用127.0.0.1:3306来连接mysql是连接不上的。最好的解决办法就是将mysql服务放在另外一个主机上,但是毕竟。。也没有那么多设备。。

一、使用 docker inspect命令

使用docker inspect 容器名/ID 可以查看当前容器的IP地址,但是当每次重启容器这个IP地址会发生变化,这种方法比较麻烦
Docker 同一主机不同容器之间的通信

二、使用Link

1.先创建Mysql
docker run --name mysql -p 3306:3306 -v /mysql/database/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 -d mysql
参数说明

  • –name docker运行给容器取得别名
  • -p 容器内部和外部的端口映射
  • -v 容器内部数据持久化,映射到/mysql/databases/data文件夹下

2.创建web容器
docker run -id -p 9999:9999 --name gitma --link mysql:othermysql 容器名
参数说明
othermysql给当前连接的数据库取一个别名为othermysql

3.修改代码中的连接地址
Docker 同一主机不同容器之间的通信
4.这样web就可以连接到mysql啦

link的方式只能解决单机容器间的互联,多机的情况下,需要进行网络桥接

三、使用桥接网络

1.建立桥接网络
docker network create --driver bridge <your_network_name>
2.创建一个指定了subnet的桥接网络
go docker network create --driver bridge --subnet 172.19.0.0/16 <your_network_name>
3.创建一个网络模式为bridge的容器
go docker run -itd --name test1 --network <your_network_name> <your_docker_image> /bin/bash
4.为容器指定ip
docker run -itd --name test1 --network <your_network_name> --ip 172.19.0.10 <your_docker_image> /bin/bash
2020.8.22