在使用 Docker 时,我们通常会遇到需要容器访问宿主服务或容器之间进行通信的情况。这里我们介绍两种常用的解决方案:路由配置和 link。
路由配置
在 Docker 中,可以通过在容器内部设置宿主 IP 地址来实现访问宿主服务。以下是一种简单的实现方法。
-
首先,查看宿主的 IP 地址,可以使用
ifconfig
或ipconfig
命令。 -
然后,在启动容器时,通过添加
--add-host
参数来将宿主 IP 地址添加到容器的/etc/hosts
文件中。例如,如果宿主 IP 地址为192.168.1.100
,则命令如下:docker run --add-host host:192.168.1.100 image_name
-
容器内部可以使用
host
来访问宿主服务。例如,假设宿主提供了一个 HTTP 服务,监听在80
端口上,可以使用以下命令测试访问:curl http://host:80/
这种方法的缺点是需要手动设置宿主 IP 地址,并且对于动态 IP 地址的宿主来说,需要重新配置容器。
Link
Docker 提供了 Link 功能,可以方便地实现容器之间的网络连接。
-
在启动容器时,通过添加
--link
参数来指定访问其他容器。例如,假设我们有两个容器container_A
和container_B
,则命令如下:docker run --name container_A image_A docker run --name container_B --link container_A:image_A_alias image_B
第二条命令中,
--link
参数指定了要访问的容器名称为container_A
,并且设置了别名为image_A_alias
。 -
在容器
container_B
内部,可以使用别名image_A_alias
来访问container_A
。例如,假设container_A
提供了一个 HTTP 服务,监听在80
端口上,可以使用以下命令测试访问:curl http://image_A_alias:80/
Link 的优点是方便快捷,不需要手动配置 IP 地址,并且支持容器名称的自动解析。但是需要注意的是,Link 功能在 Docker 1.12 版本之后已经被弃用,建议使用 Docker 网络来代替。
总结
通过路由配置和 Link 可以实现 Docker 容器访问宿主服务及容器之间的通信。路由配置适用于静态 IP 地址的宿主,而 Link 则更加方便快捷。但需要注意的是,Link 功能在 Docker 1.12 版本之后已经被弃用,推荐使用 Docker 网络来代替。
本文来自极简博客,作者:魔法学徒喵,转载请注明原文链接:Docker 访问宿主服务路由配置及 link 实现容器间访问