–add-host:
通过使用一个或多个 --add-host
标志将其他主机添加到容器的 /etc/hosts
文件中。
以下的命令展示了将IPV4的主机my-host4和IPV6的主机my-host6添加到boystar/ubantu系统的/etc/hosts文件中。其中–rm表示退出容器ubantu系统后,会自动删除容器ubantu和其中的文件系统。-it表示进入到ubantu的命令行提示符下。
docker run --add-host=my-host4=8.8.8.8 --add-host=my-host6:[2001:db8::33] --rm -it boystar/ubantu
进入ubantu的命令提示符环境下,查看/etc/hosts,如下图所示:
可以看到主机名和IP地址都加入到文件的最后。
值得注意的是,–add-host后面的主机名对应的IP地址之间,也可以是冒号(:)。上面的命令针对my-host6特意使用了冒号(:),而针对my-host4使用了等号(=)。
备注:
关于–add-host选项,官网上给出的一个例子,引起了我的关注。一开始没看明白,后来自己实操了一遍解决了疑惑。如下图所示:
下面我将我的实操步骤分享出来,一步步解释上图的意思。
1.输出echo后面的文本并存储到./hello文件。
echo "你好!" > ./hello
我将官网示例echo输出的‘hello from host’,改为“你好!”。
2.用python3启动http.server服务,端口号是8000。
python3 -m http.server 8000
- -m代表模块选项,用来启动Python的模块作为独立的服务器。
- http.server是python的内置模块,用于快速创建一个简易的http服务器,来模拟服务器环境并测试应用程序。
- 8000代表开放的端口号,只有通过8000才可以访问这个简易服务器。
执行结果如下:
官网例子并没有运行结果。从中我们可以看到http服务启动了,端口号是8000。不过,命令行提示符也无法输入了,我们只有新建终端才可以继续。
3.新终端输入访问命令
docker run --add-host host.docker.internal=host-gateway \
> curlimages/curl -s host.docker.internal:8000/hello
这个命令创建并运行curlimages/curl容器,将host.docker.internal=host-gateway添加到/etc/hosts中,并向容器传递参数-s和host.docker.internal:8000/hello。其中-s代表静默模式(-s),后面的地址是前面开放8000端口号的简易服务器地址。也就是说,这个命令除了运行容器外,还使用运行的容器curl访问主机的http服务器。host.docker.internal=host-gateway是固定用法,用于容器访问主机。结果如下:
简单解释一下,上面因为找不到本机镜像curlimages/curl所以主动从公共镜像拉取了这个镜像。最后输出了容器访问主机的http服务器得到的hello文件信息,也就是“你好!”。
4.查看http服务器
我们再来看看作为http服务器的终端。
这说明,我们的http服务器收到了请求,将请求打印了出来。