1.下载httpd镜像

docker pull httpd:2.4.43

2.运行httpd镜像并配置好端口和映射卷

1.设置宿主机httpd映射目录

cd /opt/    #进入目录
ls          #list 列出文件

docker 里面 安装ping docker安装httpd_apache

mkdir usteel_docker_httpd   #新建httpd 文件夹
cd usteel_docker_httpd/     #进入文件夹
pwd                         #打印当前位置 ps:/opt/usteel_docker_httpd
echo $PWD                   #声明变量$PWD = /opt/usteel_docker_httpd

2.运行httpd镜像生成容器

docker run -itd -p 81:80 --name usteel_httpd -v $PWD/htdocs/:/usr/local/apache2/htdocs/ -v $PWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v $PWD/logs/:/usr/local/apache2/logs/ httpd:2.4.43

然后我们发现docker报错

docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/opt/usteel_docker_httpd/conf/conf/httpd.conf\\\" to rootfs \\\"/var/lib/docker/overlay2/ac5ecdaa089a0969c65b176f95792746ed9c56d68bd42e7452a95efb6eeba047/merged\\\" at \\\"/var/lib/docker/overlay2/ac5ecdaa089a0969c65b176f95792746ed9c56d68bd42e7452a95efb6eeba047/merged/usr/local/apache2/conf/httpd.conf\\\" caused \\\"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.

这个错误与我们用到的 ‘-v’ 参数有关,是系统在生成我们所需映射卷文件时,发生问题,造成运行失败!然后本人做了很多尝试,都没有让容器正常运行,所以我们要进行一个骚操作:

  • 首先:我们先找到我们运行失败的容器
docker ps -a  #查看所有容器,不加-a 只查看所有运行的容器
  • 第二步:删除创建失败的容器
docker rm usteel_httpd  #大家需要记住,如果容器没有运行rm 后不需要加参数,如果容器正在运作,我们又不想关掉容器,就在 rm 后边加个‘-f’参数 ‘-f’ 表示强制删除

docker 关掉容器命令: docker stop 容器名称

  • 第三步:清空/opt/usteel_docker_httpd 下生成的文件
rm -rf   /opt/usteel_docker_httpd/* #友情提示:这个命令用错了就准备跑路吧!!哈哈
  • 第四步 :生成一个httpd临时容器
docker run -d httpd:2.4.43

通过 docker ps 命令可以看到已经生成成功

docker 里面 安装ping docker安装httpd_centos_02

  • 第五步:进入httpd 临时容器,查看我们要映射卷的文件目录位置
docker exec -it zen_mcclintock bash #进入容器

我们可以看到我们所需文件位置:

docker 里面 安装ping docker安装httpd_centos_03

  • 第六步:将容器中我们所需文件拷贝到宿主机上
docker cp zen_mcclintock:/usr/local/apache2/logs /opt/usteel_docker_httpd/
docker cp zen_mcclintock:/usr/local/apache2/conf /opt/usteel_docker_httpd/
docker cp zen_mcclintock:/usr/local/apache2/htdocs /opt/usteel_docker_httpd/

docker cp 用法: docker cp 容器名称:容器内文件目录 宿主机文件目录

  • 第七步:我们再运行我们的命令
docker run -itd -p 81:80 --name usteel_httpd -v $PWD/htdocs/:/usr/local/apache2/htdocs/ -v $PWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v $PWD/logs/:/usr/local/apache2/logs/ httpd:2.4.43

查看容器

docker ps

docker 里面 安装ping docker安装httpd_centos_04

  • 最后一步:我们访问宿主机 81端口,看看是否成功

    通过外网访问服务器:**...:81
    如果外网访问不到,请百度设置服务器端口安全组!
    大功告成!!

不积跬步,无以至千里