将mod_rewrite添加到Docker镜像httpd:alpine

Arc*_*var 2 mod-rewrite apache2 apache2-module docker alpine-linux

老实说,我几乎没有使用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
Run Code Online (Sandbox Code Playgroud)

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

预先非常感谢大家的支持!

Tho*_*rzl 12

mod_rewrite默认情况下在Alpine中与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
Run Code Online (Sandbox Code Playgroud)

  • @Archivar 该帖子没有解决您的问题,因为我认为它对您不起作用。请不要将其标记为正确答案。 (2认同)
  • 也许在 2018 年 4 月一切都正常了,也许从那时起事情就发生了变化,也许你不应该简单地复制和粘贴,甚至不尝试理解正在发生的事情 - 但也许答案就是错误的。哈哈 (2认同)

Daw*_*ski 12

我想您希望拥有有效的 .htaccess 重写机制。为此,您需要做两件事:

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

    LoadModule rewrite_module 模块/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