方法1、使用 docker run —link 容器互联

1、创建并启动被连接容器

  1. D:\> docker run -d --name nginx1 nginx
  2. 1dd7ac60a0dc22fdaaf76b3e5ced1802e7fb125f81cd2346732d0c3fb9678092
  3. # 进入 nginx1 容器进行更改 index.html
  4. D:\>docker exec -it nginx1 /bin/bash
  5. root@1dd7ac60a0dc:/# echo "my nginx1" > /usr/share/nginx/html/index.html
  6. # 访问下本地
  7. root@1dd7ac60a0dc:/# curl 127.0.0.1
  8. my nginx1

2、创建并启动主动连接的容器

—link 的格式 —link <容器name 或者 id>:别名

  1. D:\> docker run -d --name nginx2 --link nginx1:nginx_alias nginx
  2. f45f64e1cc569ab72f291539e424349f93485bcf2045494bdeed596ca0642f5a
  3. 说明:
  4. 这里的 --link nginx1:nginx_alias
  5. nginx1 是步骤1创建的容器名称;
  6. nginx_alias 是步骤1创建的容器的别名;【在容器 nginx2 中,nginx1nginx_alias 都是 步骤1创建的容器名称,两个名称都能访问到步骤1创建的容器。】

3、测试 nginx2 是否可以连到 nginx1

  1. # 进入容器 nginx2
  2. D:\>docker exec -it nginx2 /bin/bash
  3. # 输出 my nginx1 说明 正确连接。
  4. root@639dabd7a475:/# curl nginx1
  5. my nginx1
  6. root@639dabd7a475:/# curl nginx_alias
  7. my nginx1
  8. # 执行 env 查看环境变量
  9. root@639dabd7a475:/# env
  10. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  11. HOSTNAME=639dabd7a475
  12. TERM=xterm
  13. NGINX_ALIAS_PORT=tcp://172.17.0.3:80
  14. NGINX_ALIAS_PORT_80_TCP=tcp://172.17.0.3:80
  15. NGINX_ALIAS_PORT_80_TCP_ADDR=172.17.0.3
  16. NGINX_ALIAS_PORT_80_TCP_PORT=80
  17. NGINX_ALIAS_PORT_80_TCP_PROTO=tcp
  18. NGINX_ALIAS_NAME=/nginx2/nginx_alias
  19. NGINX_ALIAS_ENV_NGINX_VERSION=1.21.3
  20. NGINX_ALIAS_ENV_NJS_VERSION=0.6.2
  21. NGINX_ALIAS_ENV_PKG_RELEASE=1~buster
  22. NGINX_VERSION=1.21.3
  23. NJS_VERSION=0.6.2
  24. PKG_RELEASE=1~buster
  25. HOME=/root
  26. # 查看 hosts 文件
  27. root@639dabd7a475:/# cat /etc/hosts
  28. 127.0.0.1 localhost
  29. ::1 localhost ip6-localhost ip6-loopback
  30. fe00::0 ip6-localnet
  31. ff00::0 ip6-mcastprefix
  32. ff02::1 ip6-allnodes
  33. ff02::2 ip6-allrouters
  34. 172.17.0.3 nginx_alias 1dd7ac60a0dc nginx1 # 这行就是被连接容器的 ip 和名称的对应关系。
  35. 172.17.0.4 639dabd7a475

ping 命令需要安装,否则下面的实例无法执行。 apt update && apt-get install -y inetutils-ping

  1. root@639dabd7a475:/# ping nginx1
  2. PING nginx_alias (172.17.0.3): 56 data bytes
  3. 64 bytes from 172.17.0.3: icmp_seq=0 ttl=64 time=1.544 ms
  4. 64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.120 ms
  5. root@639dabd7a475:/# ping nginx_alias
  6. PING nginx_alias (172.17.0.3): 56 data bytes
  7. 64 bytes from 172.17.0.3: icmp_seq=0 ttl=64 time=0.149 ms

使用 network 互联

查看所有网络

语法:docker network ls

  1. D:\>docker network ls
  2. NETWORK ID NAME DRIVER SCOPE
  3. b99c3f6a5401 bridge bridge local
  4. 15704f66ea67 host host local
  5. adbdc7a28812 none null local

查看容器的网络配置

语法: docker inspect 容器id或者名称

  1. D:\>docker inspect b8a85ddbc2cd

结果:
image.png

查看 bridge 网络配置

语法:docker network inspect bridge

结果:image.png

创建网络

语法:docker network create —driver bridge my_network_name

结果:image.png

查看,分配的网段:
image.png

启动并测试

docker run —network ……

  1. D:\>docker run -d --name nginx_new_1 --network my_network_name nginx
  2. 84c07a9688f7548fc6e630d2b34437d1dfb1ef07da87be3a0d08d9b343b0aef0
  3. D:\>docker run -d --name nginx_new_2 --network my_network_name nginx
  4. 3d88c8a1eb49a5cbf506a13f0c1c782a78e8b6e817ada1753404e016af74378a
  5. # 进入容器内,更改 index.html 内容
  6. D:\>docker exec -it nginx_new_1 /bin/bash
  7. D:\>echo "my nginx_new_1" > /usr/share/nginx/html/index.html
  8. D:\>exit
  9. D:\>docker exec -it nginx_new_2 /bin/bash
  10. D:\>echo "my nginx_new_2" > /usr/share/nginx/html/index.html
  11. D:\>exit
  12. # 进入容器内,测试。通过容器名称就能访问了
  13. D:\>docker exec -it nginx_new_1 /bin/bash
  14. root@84c07a9688f7:/# curl nginx_new_2
  15. my nginx_new_2
  16. D:\>exit
  17. D:\>docker exec -it nginx_new_2 /bin/bash
  18. root@84c07a9688f7:/# curl nginx_new_1
  19. my nginx_new_1
  20. D:\>exit