Docker中的Apache无法提供站点

时间:2014-07-18 14:50:00

标签: php apache apache2 webserver docker

在docker容器中安装apache webserver后,我想显示一个示例页面以确保它正常工作。但是我总是得到404 Not found。

这是dockerfile

FROM ubuntu:14.04
MAINTAINER <mail@example.org>
RUN DEBIAN_FRONTEND=noninteractive

# Install required packages
RUN apt-get -y update
RUN apt-get install -y apache2 libapache2-mod-php5 php5-gd php5-json php5-mysql php5-curl php5-intl php5-imagick bzip2 wget

# Enable the php mod
RUN a2enmod php5

# Configuration for Apache
ADD ./apache.conf /etc/apache2/sites-available/
RUN ln -s /etc/apache2/sites-available/apache.conf /etc/apache2/sites-enabled/
RUN a2enmod rewrite

RUN mkdir /var/www/test && echo "<html><body><h1>Yo</h1></body></html>" >> /var/www/test/index.html

EXPOSE :80

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

的apache.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www

    <Directory /var/www/test/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

容器已启动并正在运行。端口80在主机上转发到8080。

当我浏览到localhost:8080时,我可以看到apache2的默认页面。但是,当我转到localhost:8080 / test / index.html时,我只会找到404 Not found。

4 个答案:

答案 0 :(得分:4)

这是因为您仍然使用默认的sites-enabled配置。

要删除此文件,您应添加一行以删除它(可能与添加新vhost配置的位置大致相同):

RUN rm -rf /etc/apache2/sites-enabled/000-default.conf

答案 1 :(得分:0)

我的猜测是它是一个权限问题。请记住,从dockerfile创建docker容器时,所有内容都以root身份运行。所以你的/var/www/test/index.html文件归root所有。我的猜测是它有一些限制权限。

试试这个:

RUN mkdir /var/www/test && echo "<html><body><h1>Yo</h1></body></html>" >> /var/www/test/index.html

添加

RUN chmod 0755 /var/www/test/index.html

这将重置该文件的权限,以便任何人都可以阅读它。如果我是对的,这将解决您的问题。

答案 2 :(得分:0)

我看不到:.conf文件中的ServerName“ your.domain”或localhost

答案 3 :(得分:0)

我只是遇到了类似的问题,并且能够解决它。

首先确定apache2是否正在运行

/etc/init.d/apache2 status

如果它没有运行,则可以将其添加到您的dockerfile中:

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]