11

老实说,我几乎没有使用 Alpine Linux 的经验,但我喜欢它的方法,因此想改变它。我对 Docker 也比较陌生,所以如果这是一个“愚蠢”的问题,请多多包涵。

我想要实现的是构建httpd:alpine图像并将 HTTPd 扩展到我的需要。

这将包括激活 mod_rewrite 模块并将自定义 .htaccess 复制到图像中。

这是我到目前为止所拥有的:

FROM httpd:alpine

# Copy .htaccess into DocumentRoot
COPY ./.htaccess /var/www/html/

RUN apk update
RUN apk upgrade
RUN apk add apache2-utils
RUN a2enmod rewrite
RUN rc-service apache2 restart

我现在的问题是,我经常收到“a2enmod not found”错误,我不知道如何解决。这可能是因为 a2enmod 是纯 Debian/Ubuntu/... 的东西,但我不知道激活 mod_rewrite (或任何模块)的任何替代方法。

非常感谢大家的支持!

4

2 回答 2

22

mod_rewritealpine中默认安装的是apache,所以不需要重新安装。以下是您mod_rewrite在 Alpine 中启用的方法:

FROM httpd:alpine

# Copy .htaccess into DocumentRoot
COPY ./.htaccess /var/www/html/

RUN sed -i '/LoadModule rewrite_module/s/^#//g' /usr/local/apache2/conf/httpd.conf

RUN { \
  echo 'IncludeOptional conf.d/*.conf'; \
} >> /usr/local/apache2/conf/httpd.conf \
  && mkdir /usr/local/apache2/conf.d
于 2018-04-13T05:52:07.033 回答
4

我想你想要有工作的 .htaccess 重写机制。为此,您需要做两件事:

  • 在 httpd.conf 中通过取消注释行启用 mod_rewrite:

    LoadModule rewrite_module modules/mod_rewrite.so

  • 在 httpd.conf 中,将工作目录的 AllowOverride 更改为 All(不要更改每个 AllowOverride,因为这是安全问题)

    允许覆盖所有

最好从容器下载 httpd.conf,更改此值,然后在构建映像时将新的 httpd.conf 上传到同一目录:

例如

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

  • 上传新的 httpd.confon 构建过程: COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf

于 2020-11-25T15:38:04.113 回答