Linux学习:docker搭建httpd,并解决映射卷文件失败的error
前言:
最近在研究静态的html文件展示、自动刷新识别新的文件和前端资源包的需求,最后决定使用docker搭建httpd容器来完成。
一、使用docker pull:
docker pull httpd
二、创建挂载目录:
mkdir httpd
cd httpd
mkdir logs
mkdir cnof
mkdir htdocs
ll
三、创建httpd容器:
docker run -d --name myhttpd -p 8001:80 -p 8003:443 --restart=always -v /home/yuerhoo/yuerhoo/httpd/htdocs/:/usr/local/apache2/htdocs/ -v /home/yuerhoo/yuerhoo/httpd/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /home/yuerhoo/yuerhoo/httpd/logs/:/usr/local/apache2/logs/ -d docker.io/httpd
创建容器运行却报错:ocker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:75: mounting "/home/yuerhoo/yuerhoo/httpd/conf/httpd.conf" to rootfs at "/usr/local/apache2/conf/httpd.conf" caused: mount through procfd: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
提示没有httpd.conf文件,这个错误与我们用到的 ‘-v’ 参数有关,是系统在生成我们所需映射卷文件时,发生问题,造成运行失败!
四、处理报错的问题:通过创建临时容器,把临时容器的文件复制到宿主机上,再创建我们需要的容器就可以解决这个问题!
a、先查看容器,找到运行失败的容器:docker ps –a
b、删除失败的容器:docker rm 1ea
c、清空httpd 下所有的文件:
rm -rf conf rm -rf htdocs rm -rf logs
d、创建临时容器:docker run -d httpd,查看临时容器启动正常。
e、将容器中我们所需文件拷贝到宿主机上:
docker cp eager_goldberg:/usr/local/apache2/logs /home/yuerhoo/yuerhoo/httpd docker cp eager_goldberg:/usr/local/apache2/conf /home/yuerhoo/yuerhoo/httpd docker cp eager_goldberg:/usr/local/apache2/htdocs /home/yuerhoo/yuerhoo/httpd
f、执行最开始创建容器的命令,创建我们需要的容器。
docker run -d --name myhttpd -p 8001:80 -p 8003:443 --restart=always -v /home/yuerhoo/yuerhoo/httpd/htdocs/:/usr/local/apache2/htdocs/ -v /home/yuerhoo/yuerhoo/httpd/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /home/yuerhoo/yuerhoo/httpd/logs/:/usr/local/apache2/logs/ -d docker.io/httpd
docker run -d --name myhttpd -p 8001:80 -p 8003:443 --restart=always -v /home/yuerhoo/yuerhoo/httpd/htdocs/:/usr/local/apache2/htdocs/ -v /home/yuerhoo/yuerhoo/httpd/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /home/yuerhoo/yuerhoo/httpd/logs/:/usr/local/apache2/logs/ -d docker.io/httpd
g、查看创建容器成功后,我们再删除之前的临时容器:
五、查看我们的静态文件可以正常访问
浏览器打开地址,端口是创建容器时设置的端口,我这里设置的是8001。至此我们的httpd容器搭建成功,可以放入html文件或者整个前端资源包,都可以即时刷新和浏览,非常方便。。。