点击跳转:Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套(质量有保证,内容详情)
容器重启后,ip会发生变化。通过容器ip访问不是一个好的方案。
通过宿主机的ip:port
访问,只能依靠监听在暴露出的端口的进程来进行有限的通信。
容器之间通信不能用 localhost
、127.0.0.1
,只能用宿主机的 ip:port
通信,但是主机的ip地址会随着宿主机的重启而变化
以 MySQL 容器为例如下:
docker run -it -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
如下图,暴露端口的方式很方便主机与容器之间的通信,跟连接主机本地一样
运行容器时,指定参数link,使得源容器与被链接的容器可以进行相互通信,并且接受的容器可以获得源容器的一些数据,比如:环境变量。
# 源容器:mysql
docker run -itd --name mysql_test -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#被链接容器 ubuntu
docker run -itd --name ubuntu_test --link test-mysql:mysql ubuntu /bin/bash
#进入test-ubuntu
docker exec -it ubuntu_test /bin/bash
通过用户自定义网络,加入了这个网络的容器可以互相联通,通过容器名称
即可互相访问,相当于在同一个局域网。
推荐新建的容器 -p
和 --network
都配置。
配置
-p
选项让宿主机和容器之间通过暴露端口
来通信配置
--network
选项让容器加入同一个网络,加入同一个网络后就可通过容器名称来通信。
以centos
和mysql
容器之间通信为例:
docker network来创建一个桥接网络,在docker run的时候将容器指定到新创建的桥接网络中,这样同一桥接网络中的容器就可以通过互相访问。
docker network create dockerbetweennetwork
创建mysql容器加入到dockerbetweennetwork网络,也暴露了3306端口给主机使用
# 创建mysql容器
docker run -p 3306:3306 --name mysql \
--network dockerbetweennetwork \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
# 创建centos容器
docker run -it --name centos \
--network dockerbetweennetwork \
--rm centos /bin/bash
centos这种服务器性质的docker容器必须跟上命令,不然会默认退出;
# 查看mysql容器ip地址
docker inspect mysql
测试是否可以通过容器名称ping通mysql容器。
# 进入centos容器中
docker exec -it centos /bin/bash
# ping 上面得到的mysql容器的地址
ping mysql
我的文章:《如何查看一个Docker镜像有哪些版本.md》
我的文章:《Docker设置国内镜像源.md》
我的文章:《Docker快速入门实用教程.md》
我的文章:《Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务.md》
我的文章:《Docker安装Nacos服务.md》
我的文章:《如何修改Docker中的文件.md》
我的文章:《Docker容器间的连接或通信方式.md》
我的文章:《Docker安装的MySQL如何持久化数据库数据.md》
我的文章:《制作Docker私有仓库.md》
我的文章:《使用docker-maven-plugin插件构建发布推镜像到私有仓库.md》
我的文章:《解决Docker安装Elasticsearch后访问9200端口失败.md》
传送门:保姆式Spring5源码解析
欢迎与作者一起交流技术和工作生活
联系作者