赞
踩
--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选项,官网上给出的一个例子,引起了我的关注。一开始没看明白,后来自己实操了一遍解决了疑惑。如下图所示:
下面我将我的实操步骤分享出来,一步步解释上图的意思。
echo "你好!" > ./hello
我将官网示例echo输出的‘hello from host’,改为“你好!”。
python3 -m http.server 8000
执行结果如下:
官网例子并没有运行结果。从中我们可以看到http服务启动了,端口号是8000。不过,命令行提示符也无法输入了,我们只有新建终端才可以继续。
- 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文件信息,也就是“你好!”。
我们再来看看作为http服务器的终端。
这说明,我们的http服务器收到了请求,将请求打印了出来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。