在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。
答案 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"]