我的Dockerfile如下:
FROM php:7.2-apache
#install some basic tools
RUN apt-get -dd clean && apt-get -dd update && apt-get install -y \
git \
tree \
vim \
wget \
iputils-ping \
mysql-client \
subversion
#install some base extensions
RUN apt-get install -y \
libzip-dev \
libicu-dev \
zip \
&& docker-php-ext-configure zip --with-libzip \
&& docker-php-ext-configure intl \
&& docker-php-ext-install zip intl opcache pdo_mysql mysqli
#setup composer
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/ \
&& ln -s /usr/local/bin/composer.phar /usr/local/bin/composer
WORKDIR /var/www/app
EXPOSE 80
RUN a2enmod rewrite
用mysql编写上面的图像后,我启动服务器,例如
docker-compose up -d
通过以下方式访问容器:
docker exec -it php_web_1 bash
然后我检查apache2服务状态:
service apache2 status
[FAIL] apache2未运行...失败!
如果我只是运行命令:apache2
httpd(pid 1)已经在运行
service apache2 start/stop
对apache2状态没有任何影响。
两种方式有什么区别,为什么service apache2 start/stop
不起作用?
答案 0 :(得分:0)
如果查看Dockerfile
基本映像的php:7.2-apache
,您会看到CMD ["apache2-foreground"]
运行位于/usr/local/bin/
目录中的脚本以运行Apache服务器容器启动。如果您使用基本映像设置交互式会话并运行SysVInit命令(如service apache2 start
),则会在您进行会话时停止的容器内启动Apache服务。
在您的情况下,尝试运行位于Dockerfile
目录中的/usr/local/bin/
中的脚本作为CMD
命令,然后重新运行docker-compose up -d
以查看Apache是否为是否开始。