Docker apache2不会考虑新的000-default.conf

时间:2016-02-16 13:34:24

标签: php apache docker docker-compose dockerfile

我正在尝试将Laravel 5.2应用程序停靠。为此,我使用以下图片,

php:apache
mysql:5.7

以下是我的docker-compose.yml

web:
  build: .
  volumes:
    - ./:/var/www/html
  ports:
    - "9899:80"
  links:
    - db
  command : [/usr/sbin/apache2ctl, -D, FOREGROUND]

db:
  image: mysql:5.7
  volumes:
    - /home/data:/var/lib/mysql
  environment:
    MYSQL_DATABASE: custom
    MYSQL_ROOT_PASSWORD: custom

我的Dockerfile

FROM php:apache
RUN apt-get update && docker-php-ext-install pdo pdo_mysql
RUN rm -f /etc/apache2/sites-available/000-default.conf
ADD ./settings/000-default.conf /etc/apache2/sites-available

Dockerfiledocker-compose.yml都位于laravel根目录中。要运行基于laravel的应用程序,服务器必须指向public文件夹。因此,您可以看到我正在使用以下apache2文件替换000-default.conf的默认配置文件,

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

docker-compose up命令上的所有内容都运行正常但是,当我浏览localhost:9899时,我收到了Forbidden错误,但localhost:9899/public正确启动了laravel app。这意味着我提供的000-default.conf无法生效,服务器仍然指向/var/www/html/而不是/var/www/html/public

所以我尝试exec进入运行容器以检查000-default.conf。我可以看到我的文件而不是默认文件。我没有理解这个问题。我希望apache考虑我的000-default.conf。我希望你们能看到我做错了什么。

1 个答案:

答案 0 :(得分:3)

Apache不会查看sites-available目录,而是查看sites-enabled目录。 您可以将您的配置文件ADD放入后一个目录,或者设置符号链接:

ADD ./settings/000-default.conf /etc/apache2/sites-available
RUN ln -s /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled/000-default.conf