我正在尝试在本地对我的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映像正确连接?
您的问题的简短答案是:您发布的VirtualHost directive
在docker容器内将不起作用,因为它引用了本地计算机目录:/Library/WebServer/Documents/maps/maps/static
和/Library/WebServer/Documents/maps/maps_project
您将需要创建一个自定义VirtualHost指令,该指令引用您的Docker容器内而不是本地计算机内的路径。
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