目录

Docker容器间优雅的互联

本文主要介绍如何优雅的让Docker容器和Docker容器之间相互通信,以及Docker容器如何和宿主机进行网络通信。

容器间网络通信

docker容器间通信常见的方式是使用 –link 进行连接,但是Docker已经弃用这种方式,并且容器数量一旦一多,–link 会显得很乱。官方推荐使用自定义网络来进行互联。

创建自定义网络

docker network create my-network

创建容器使用自定义network

比如一个nginx容器需要访问php容器

docker run -p 80:80 --network my-network nginx
docker run --name php --network my-network php

这个时候nginx可以直接通过php来访问php容器,打开/etc/hosts可以发现是docker自动帮你添加了解析

容器访问主机服务

可以使用容器的网关IP来访问(nat网络),不过使用ip不优雅,旧版本的Docker可以使用host.docker.internal来访问主机,新版本的无法直接访问,可以通过 docker run 增加启动参数来兼容这种方案

docker run --name nginx \
  -v "$(pwd)"/www:/usr/share/nginx/html:ro \
  -v "$(pwd)"/conf/nginx.conf:/etc/nginx/nginx.conf \
  -v "$(pwd)"/conf/conf.d:/etc/nginx/conf.d \
  -v "$(pwd)"/conf/ssl:/etc/nginx/ssl \
  -p 80:80 \
  -p 443:443 \
  --add-host=host.docker.internal:host-gateway \
  --network iuxt \
  --restart always \
  -d nginx

之后就可以在容器内通过host.docker.internal来访问主机了。