docker 多容器访问

参考文档open in new window

使用场景

比如MySQL是使用docker运行的,另一个docker容器需要访问,这就需要一个容器访问另一个容器

# --link 依赖的容器名:别名
docker run -itd --name containeraName --link mysql:mysqlAlias  -p 7000:7000 containeraName:latest

查看hosts文件

$ cat /etc/hosts
# /etc/hosts
# 
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix  
172.17.0.5      mysqlAlias mysql mysql
172.17.0.14     63fd381e0ef2 

注意以下几点:

  1. 使用link选项建立的容器运行时需要所链接的容器也必须是运行状态。没运行会有提示的。
  2. 使用link选项链接的主机ip不需要固定,因为每次新建容器都会检查所链接容器的ip,在/etc/hosts里生成新的alias 名称对应的ip

容器网络

1.创建网络

docker network create test-network

2.启动MySQL容器

# --network 加入的网络名称
# --network-alias 当前容器的别名,其它容器访问该容器使用。
docker run -d `
    --network test-network --network-alias mysql `
    -e MYSQL_ROOT_PASSWORD=123456 `
    -p 3306:3306 `
    mysql

3.启动应用容器

应用容器就可以访问mysql
docker run -itd --network test-network --name containeraName -p 7001:7001 containeraName:latest

注意: 上述两种方案不能同时使用

说明

上述两种方式都可以使用各种别名(alias)的原因在于:Docker 能够将其解析为具有该网络别名的容器的 IP 地址