使用Docker Toolbox运行httpd容器,挂载自己的网页目录为什么不行?-要搞清楚Toolbox终端根目录结构、虚拟机VM的根目录结构的区别

来源:互联网 发布:sql sever 32位 编辑:程序博客网 时间:2024/05/18 15:27

任务:
本机运行环境为Win7+Docker Toolbox,
使用Toolbox创建了Docker虚拟机,
拟在Docker 虚拟机上运行httpd Docker容器。

到官网下载一个httpd镜像,docker pull httpd 
自己的页面文件放到 c:/Users/win7用户/www 目录和c:/www 各一份,
使用virtualbox界面创建本地c:/www 共享成目录/www 给VM使用,
想启动一个httpd容器,正确显示自己的Web页面。

过程:    
在 Docker Toolbox 终端上执行:
 eval $(docker-machine env 虚拟机名),
切换到要管理的虚拟机上,

直接运行一个 httpd 容器,
docker run -dit -p 84:80 -v /c/Users/catty/www/:/usr/local/apache2/htdocs/ httpd
对外的映射的端口为84,容器内部的端口为80,
想把本地网页目录 /c/Users/catty/www 目录挂载到容器中,
官网介绍的容器内部httpd页面目录为/usr/local/apache2/htdocs/

问题:
运行以后,通过浏览器访问http://IP:84,
没有出现自己想要的页面?!
显示:index of / ,其他页面什么都没有,
到底是怎么回事?该问题出在哪里?
怎样才能正常运行自己的网页?

截图:

解决:

不能直接在Toolbox终端上运行docker run 的命令,
必须先使用“docker-machine ssh 虚机名”命令,
SSH 登录到VM虚拟机上,
在VM上执行docker run命令,才能正常访问页面。

原因:
1、没有搞清楚Toolbox 终端的根目录结构和虚拟机根目录结构之间的区别,
2、应该使用docker-machine ssh xxx 登录到虚机上执行docker run命令,


问题解释:

1、在Toolbox终端界面上,直接执行如下命令,为什么不能访问网页?
docker run -dit -p 93:80 -v /c/Users/catty/www/:/usr/local/apache2/htdocs/ httpd

答:/c/Users/catty/www/ 这个目录在VM 终端中能看到,
在Toolbox终端中,没有/c/Users/catty/www/这个目录,所以会无法访问。


2、在Toolbox 终端界面上,直接执行如下命令,为什么不能访问网页?
docker run -dit -p 94:80 -v /www:/usr/local/apache2/htdocs httpd

答:在Toolbox 终端上没有/www目录,
www目录是需要手工再VirtualBox管理界面中手工创建的共享目录(如图),
是共享给VM机器使用的,VM虚拟机上可以看到该 /www 目录,

以上命令都必须使用“docker-machine ssh 虚机名”命令,
ssh 登录到VM虚拟机上,在VM上执行docker run命令,
才能正常访问页面。

#这些宿主机与虚拟机之间的共享目录都是共享给VM的,
#在VM上才能看到/www和/c/Users/catty/www目录
#所以在Docker Toolbox上执行上述命令,
#会因为找不到目录,
#导致容器中的htdocs目录中为空
#运行容器的网站当然无法访问。

#另外:手工创建虚拟机与本地的WWW共享目录需要重新启动虚机才能生效,
#否则在虚拟机的终端上,还是无法看到 /www 目录。

#结束
阅读全文
0 0