1. 通过容器ip访问
容器重启后,ip会发生变化。通过容器ip访问不是一个好的方案。
2. 通过宿主机的ip:port访问
通过宿主机的ip:port访问,只能依靠监听在暴露出的端口的进程来进行有限的通信。
3. 通过link建立连接(官方不推荐使用)
运行容器时,指定参数link,使得源容器与被链接的容器可以进行相互通信。
#源容器:mysql
docker run -itd --name test-mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#被链接容器 centos
docker run -itd --name test-centos --link test-mysql:mysql centos /bin/bash
#进入test-centos
docker exec -it test-centos /bin/bash
此时会在test-centos容器的/etc/hosts中添加域名解析。并且当容器IP变化时,docker会自动维护映射关系。
#cat /etc/hosts
127.0.0.1 localhost
172.17.0.15 mysql test-mysql 0c0847f7a4c4
4. 通过 User-defined networks(推荐)
docker network来创建一个桥接网络,在docker run的时候将容器指定到新创建的桥接网络中,这样同一桥接网络中的容器就可以通过互相访问。
docker network connect 命令是用于将docker容器连接到某个网络中,或者与其他容器建联,容器可以使用容器名或者容器ID。
用法
docker network connect [OPTIONS] NETWORK CONTAINER
选项
名称,简写 | 默认 | 说明 |
---|---|---|
--alias | 为容器添加网络范围的别名 | |
--ip | 指定IP地址 | |
--ip6 | 指定IPv6地址 | |
--link | 添加链接到另一个容器 | |
--link-local-ip | 添加容器的链接本地地址 |
相关命令
命令名称 | 说明 |
---|---|
docker network create | 创建一个网络(默认为桥接模式) |
docker network connect | 将容器连接到网络 |
docker network disconnect | 断开容器的网络 |
docker network inspect | 显示一个或多个网络的详细信息 |
docker network ls | 列出网络 |
docker network prune | 删除所有未使用的网络 |
docker network rm | 删除一个或多个网络 |
举几个栗子:
将运行中的容器ctn1 连接/断连 到网络net1中,
docker network connect net1 ctn1
or
docker network disconnect net1 ctn1
在启动容器ctn1时,连接到网络net1上,
docker run -itd --network=net1 ctn1
给容器分配指定ip(192.168.10.10)
docker network connect --ip 192.168.10.10 net1 ctn1
--alias:为容器在网络范围内添加一个别名。
docker network connect --alias db --alias mysql multi-host-network container2
创建网络,并指定subnet和ip范围
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 multi-host-network
评论区