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文件或者整个前端资源包,都可以即时刷新和浏览,非常方便。。。

 

posted @ 2022-03-22 22:46  不周之风  阅读(1088)  评论(0编辑  收藏  举报