以下操作均在 root 用户下进行,否则请带上
sudo
,或者是把用户加到 docker 用户组内。
下面说的标识符,包括名称或 ID 的一部分;一般来说,名称可以和标识符互用,但建议使用名称。
nicolaka/netshoot
- 方便查看网络信息的镜像里面集成了多种网络工具,方便本章的演示。
文档:
不同容器间通信。
当然,也可以向宿主机暴露端口来实现,但是这样不优雅,同时会占用、暴露宿主机端口,不安全。
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,仍然访问不了;前例为特殊情况。
docker network create [-d 网络类型] 网络名
网络类型:bridge
(默认)、overlay
(用于 Swarm mode,暂不用考虑)
docker network ls
可批量;删之前确保没有容器在该网络中。
docker network rm 网络标识符 ...
新建容器时,添加如下选项:
--network 网络名
之后,容器可以通过配置的名称访问同属于这个网络下的容器。
如果容器已经运行,可以执行:
docker network connect 网络名 容器标识符
在同一个网络中,为其他容器取别名,可在新建容器时使用以下选项:
--link 容器标识符:别名
这样,在容器中,既可使用容器名访问其他容器,也可使用别名访问。
docker network disconnect [-f] 网络名 容器标识符
-f
:强制