我在Apache docker映像中的VirtualHost指令复制到哪里?

问题描述 投票:1回答:2

我正在尝试在本地对我的Apache / Django项目进行Docker化。在我的本地计算机(运行Mac Sierra)上,我的/ etc / apache2 / other /目录中有此文件(maps.conf)...

<VirtualHost *:80>
    ServerName maps.example.com

    Alias /static /Library/WebServer/Documents/maps/maps/static
    <Directory /Library/WebServer/Documents/maps/maps/static>
        Require all granted
    </Directory>

    # Next, add the following directory block
    <Directory /Library/WebServer/Documents/maps/maps_project>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess maps python-home=/Library/WebServer/Documents/maps/venv python-path=/Library/WebServer/Documents/maps
    WSGIProcessGroup maps
    WSGIScriptAlias / /Library/WebServer/Documents/maps/maps_project/wsgi.py

</VirtualHost>

我找到了这个Apache docker文件...

FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/

我应该在哪里复制我的VirtualHost指令,以便我的Apache docker映像正确连接?

django apache docker virtualhost
2个回答
0
投票

您的问题的简短答案是:您发布的VirtualHost directive在docker容器内将不起作用,因为它引用了本地计算机目录:/Library/WebServer/Documents/maps/maps/static/Library/WebServer/Documents/maps/maps_project

您将需要创建一个自定义VirtualHost指令,该指令引用您的Docker容器内而不是本地计算机内的路径。


0
投票

The Docker docs for the official Apache image显示如何提取主要的Apache配置:

docker run --rm httpd:2.4 cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf

现在您在容器外部的本地有了一个my-httpd.conf。打开它,看看-它只是一个标准的Apache配置,在底部,您将看到通常的样子:

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

所以现在我们既可以看到如何包含虚拟主机,也可以看到它们的放置位置。

首先,取消注释my-httpd.conf的本地副本中的该行,以便包含vhosts配置。我们会将您编辑的版本复制到容器中,并覆盖原始版本,以便在运行时使用。

接下来,确切地讲,如何获取主配置的副本,使用我们从主配置的Include语句中看到的路径,获取默认vhosts文件的副本:

docker run --rm httpd:2.4 cat /usr/local/apache2/conf/extra/httpd-vhosts.conf > my-vhosts.conf

现在,您可以确切地看到默认虚拟主机的设置方式,并对其进行编辑以适应需要。与主配置一样,您将您的配置复制到容器中以替换默认配置。您当然可以跳过此步骤,而无需使用默认文件作为模板就可以使用虚拟主机。

接下来,我们需要将您的内容放入容器中。默认的vhosts文件显示一个Docroot,如:

DocumentRoot "/usr/local/apache2/docs/dummy-host.example.com"

您可以将您的内容放在任何地方,并更新vhost Docroot以使其匹配,但是为简单起见,我们坚持使用默认映像使用的路径。假设我们将您的内容复制到/usr/local/apache2/docs/my-app

更新vhost配置Docroot:

DocumentRoot "/usr/local/apache2/docs/my-site"

最后,将所有内容放到Dockerfile中:

FROM httpd:2.4
COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./my-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf
COPY ./public-html /usr/local/apache2/docs/my-site
© www.soinside.com 2019 - 2024. All rights reserved.