docker -v 一映射【挂载】就无法启动容器要怎么排查

本机环境
window10
Docker Engine
v20.10.8

Dockerfile 文件如下

# 使用官方 PHP 7.3 镜像.
# https://hub.docker.com/_/php
FROM php:7.3-apache

# 将本地代码复制到容器内
COPY index.php /var/www/html/

# Apache 配置文件内使用 8080 端口
RUN sed -i 's/80/80/g' /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf

# 将 PHP 配置为开发环境
# 如果您需要配置为生产环境,可以运行以下命令
# RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# 参考:https://hub.docker.com/_/php#configuration
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"
EXPOSE 80
#启动命令 ,通过-D参数切换到前台运行
# CMD ["/usr/sbin/apache2ctl","-D","FOREGROUND"]

我的操作流程如下

创建镜像
docker image build -t hello-php-demo:0.0.1 .

直接运行镜像不挂载【正常】
docker run -it --rm -p 80:80 hello-php-demo:0.0.1 /bin/bash

将docker的 /var/www/html 挂载到当前目录
docker run -it --rm -p 80:80 hello-php-demo:0.0.1 -v "$PWD/":/var/www/html /bin/bash

我就是多加了 -v "$PWD/":/var/www/html 运行后发现输出了一段,不是报错,容器也没有运行

image.png

搜了很久问题都是说加上 –privileged=true 参数,实际测试并不行,跟截图一样

查看容器启动失败原因(看不出来原因啊....)
Server version: Apache/2.4.48 (Debian)
Server built: 2021-08-12T11:51:47

截图如下

image.png

疑问1:如何挂载才能成功啊

疑问2:事实上这样运行这个容器的话里面的apache还需要手动启动的,怎么让他自动运行呢 CMD ["/usr/sbin/apache2ctl","-D","FOREGROUND"] 这个我用上之后还无法运行了........

麻烦有空的大佬解答下,感谢

阅读 4.1k
1 个回答

第一个问题:

使用 -v 参数挂载是没问题的,出现你截图的上的问题是因为-v加错位置了。
docker run -it --rm -p 80:80 hello-php-demo:0.0.1 -v "$PWD/":/var/www/html /bin/bash
应该这样执行:
docker run -it --rm -p 80:80 -v "$PWD/":/var/www/html hello-php-demo:0.0.1 /bin/bash

docker run 要把参数放在镜像名字前面,你放在后面相当于把-v参数传给apache2ctl了。你可以试试在容器里执行 apache2ctl -v ,就能复现那个"错误"的输出了。

第二个问题:
把 /bin/bash 去掉,直接这样运行:
docker run -d -p 80:80 -v "$PWD/":/var/www/html hello-php-demo:0.0.1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题