我有这个Dockerfile,它对官方Apache HTTP Server Docker映像进行了额外的配置。有没有更干净的方法可以在Dockerfile中执行此操作?我对Apache HTTP Server的配置非常陌生,几乎可以将它们拼凑起来。 (启用mod_rewrite的原因是因为我在htdocs文件夹中的.htaccess文件中使用了它)
ARG BUILD_DIR=/usr/src/app
FROM node:10.13.0-alpine as build
ARG BUILD_DIR
WORKDIR $BUILD_DIR
COPY package.json .
RUN npm install
COPY src src
COPY public public
RUN npm run build
FROM httpd:2.4.37-alpine
ARG BUILD_DIR
ENV SERVER_CONTAINER_NAME=server
COPY --from=build $BUILD_DIR/build htdocs
RUN sed -i 's,#\(LoadModule rewrite_module modules/mod_rewrite.so\),\1,g' conf/httpd.conf \
&& sed -i -e '/<Directory "\/usr\/local\/apache2\/htdocs">/,/<\/Directory>/{s/AllowOverride None/AllowOverride All/}' conf/httpd.conf \
&& sed -i 's,#\(LoadModule proxy_module modules/mod_proxy.so\),\1,g' conf/httpd.conf \
&& sed -i 's,#\(LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so\),\1,g' conf/httpd.conf \
&& echo 'ProxyRequests off' >> conf/httpd.conf \
&& echo 'ProxyPass /ws ws://${SERVER_CONTAINER_NAME}:8080/ws interpolate' >> conf/httpd.conf
答案 0 :(得分:0)
将这些配置文件的修改后的版本保留在映像之外,然后在构建过程中将其复制到容器中可能会更清洁。
或者,您可以将所有shell命令放在脚本中。在构建过程中,将脚本复制到容器中。在脚本末尾添加以下内容:
exec /usr/sbin/apache2ctl -f /etc/apache2/apache2.conf -DFOREGROUND
启动服务器。然后让docker以以下方式调用脚本
CMD [ "/MyScript.sh" ]