apache - 无法使用 docker 自动启动 apache

标签 apache ubuntu docker docker-compose dockerfile

我为 php 开发做了一个简单的自定义 docker 设置。到目前为止,一切都按预期工作。我唯一想不通的是为什么 apache2 不能自动启动。

这是我的 docker 文件:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y apache2 php libapache2-mod-php php-mcrypt php-mysql php-cli php-curl php-xml php-intl php-mbstring git vim composer curl

COPY . /var/www/example
COPY vhost.conf /etc/apache2/sites-available/example.conf

RUN a2ensite example
RUN chown -R www-data:www-data /var/www/example/logs
RUN service apache2 restart

这是我的 docker-compose.yml:
version: '2'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: myexampleapp
    ports:
        - 8080:80
    tty: true

这是输出 docker-compose up 命令:
me@mydell:~/workspace/mydockercompose$ docker-compose up -d --build
Creating network "mydockercompose_default" with the default driver
Building app
Step 1/7 : FROM ubuntu:latest
 ---> f975c5035748
Step 2/7 : RUN apt-get update && apt-get install -y apache2 php libapache2-mod-php php-mcrypt php-mysql php-cli php-curl php-xml php-intl php-mbstring git vim composer curl
 ---> Using cache
 ---> 148c3a9d928a
Step 3/7 : COPY . /var/www/example
 ---> 1fbc1dbacf1e
Step 4/7 : COPY vhost.conf /etc/apache2/sites-available/example.conf
 ---> 9c08947b09e9
Step 5/7 : RUN a2ensite example
 ---> Running in 1ef64defe747
Enabling site example.
To activate the new configuration, you need to run:
  service apache2 reload
Removing intermediate container 1ef64defe747
 ---> ca1c8e7e80fc
Step 6/7 : RUN chown -R www-data:www-data /var/www/example/logs
 ---> Running in 57b0214be7a0
Removing intermediate container 57b0214be7a0
 ---> b3b270a36bf4
Step 7/7 : RUN service apache2 restart
 ---> Running in 09d2b1d3bd91
 * Restarting Apache httpd web server apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
   ...done.
Removing intermediate container 09d2b1d3bd91
 ---> 19fa9a90f9de
Successfully built 19fa9a90f9de
Successfully tagged myexampleapp:latest
Creating mydockercompose_app_1

它清楚地表明apache已成功重新启动。然而它实际上并没有:
me@mydell:~/workspace/mydockercompose$ docker exec -i -t 20add8ad9895 service apache2 status
 * apache2 is not running

我是 docker 新手,所以欢迎所有改进我目前所做工作的建议(即使他们没有回答这个特定问题)。

谢谢

最佳答案

Docker 服务必须在前台运行。在您的 Dockerfile 中,RUN service apache2 restart将启动 apache 作为后台进程。因此容器将退出。

要在前台运行 apache,请将以下内容添加到 Dockerfile。
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

FROM ubuntu:latest
RUN apt-get update && apt-get install -y apache2 php libapache2-mod-php php-mcrypt php-mysql php-cli php-curl php-xml php-intl php-mbstring git vim composer curl

COPY . /var/www/example
COPY vhost.conf /etc/apache2/sites-available/example.conf

RUN a2ensite example
RUN chown -R www-data:www-data /var/www/example/logs
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

关于apache - 无法使用 docker 自动启动 apache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49764989/

相关文章:

spring - 在tomcat中将apache camel与CXf集成

apache - 使用查询字符串 htaccess 重定向 URL

linux - 权限设置为644但用户无法读取:-(

ubuntu -/vagrant 挂载后如何运行 nginx.service

mysql - Ruby on Rails 安装、Windows10 上的 Ubuntu #<Mysql2::Error: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)>

ubuntu - Nginx密码认证排除一个目录

linux - 从 gitlab ci 中的 shell 脚本安装后,节点和 npm 无法识别

apache - 重写 httpd.conf 和虚拟主机 SSL 规则

docker - FreeBSD上的Docker守护程序无法启动:graphdriver和zfs问题

docker - 什么是暂停容器?