跳转至

Docker 网络

约 541 个字 11 行代码 4 张图片 预计阅读时间 2 分钟

Warning

以下操作均在 root 用户下进行,否则请带上 sudo,或者是把用户加到 docker 用户组内。

Info

下面说的标识符,包括名称或 ID 的一部分;一般来说,名称可以和标识符互用,但建议使用名称。

nicolaka/netshoot - 方便查看网络信息的镜像

里面集成了多种网络工具,方便本章的演示。

文档:

Docker 网络能够解决的问题

不同容器间通信。

当然,也可以向宿主机暴露端口来实现,但是这样不优雅,同时会占用、暴露宿主机端口,不安全。

不同容器间通信
不同容器间通信

容器内访问宿主机

  • 通过宿主机的 IP 地址访问(不推荐;只能在宿主机查询,不同主机的情况可能不一样)。
  • 宿主机内有 docker0 网络,其地址可以被容器访问(只能在宿主机查询,不同主机的情况可能不一样)。
  • 在新建容器时,添加以下选项:
    --add-host=要在容器内使用的主机名:host-gateway
    
    一般来说会设置为:
    --add-host=host.docker.internal:host-gateway
    
    即可在容器内通过设置的主机名(如 host.docker.internal)访问宿主机

docker run--add-host 选项

--add-host=主机名称:IP

实质是把下面的条目写进容器的 /etc/hosts 中:

IP  主机名称

容器内访问不了的 IP,仍然访问不了;前例为特殊情况。

--add-host 选项的示意图
--add-host 选项的示意图

Docker 网络操作

添加

docker network create [-d 网络类型] 网络名

网络类型:bridge(默认)、overlay(用于 Swarm mode,暂不用考虑)

查看

docker network ls

删除

可批量;删之前确保没有容器在该网络中。

docker network rm 网络标识符 ...

Docker 容器连接到网络

新建容器时,添加如下选项:

--network 网络名

之后,容器可以通过配置的名称访问同属于这个网络下的容器。

如果容器已经运行,可以执行:

docker network connect 网络名 容器标识符

Docker 容器连接到网络示意图
Docker 容器连接到网络示意图

使用别名

在同一个网络中,为其他容器取别名,可在新建容器时使用以下选项:

--link 容器标识符:别名

这样,在容器中,既可使用容器名访问其他容器,也可使用别名访问。

使用别名示意图
使用别名示意图

Docker 容器断开网络

docker network disconnect [-f] 网络名 容器标识符
  • -f:强制

参考资料