本机环境
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
运行后发现输出了一段,不是报错,容器也没有运行
搜了很久问题都是说加上 –privileged=true 参数,实际测试并不行,跟截图一样
查看容器启动失败原因(看不出来原因啊....)
Server version: Apache/2.4.48 (Debian)
Server built: 2021-08-12T11:51:47
截图如下
疑问1:如何挂载才能成功啊
疑问2:事实上这样运行这个容器的话里面的apache还需要手动启动的,怎么让他自动运行呢 CMD ["/usr/sbin/apache2ctl","-D","FOREGROUND"] 这个我用上之后还无法运行了........
麻烦有空的大佬解答下,感谢
第一个问题:
使用 -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