在Docker中运行busybox httpd的angular2 webpack应用程序

基本上它看起来像它的作品….除了当你重新加载页面。

我已经构build了一个简单的ng2应用程序,并将它打包到一个文件结构如下的webpack:

./dist - index.html - inline.bundle.map - main.bundle.js - main.bundle.map - styles.bundle.js - styles.bundle.map - vendor.bundle.js - vendor.bundle.map 

如果我使用PHP的构build服务器来承载这样的网站:

 $ cd ~/dist $ php -S localhost:8000 

该网站工作正常。

如果我把相同的代码放在我的docker镜像中,像这样:

 FROM busybox:latest ENV HOME /client/ WORKDIR ${HOME} COPY ./dist ${HOME} EXPOSE 80 CMD [ "httpd", "-fv"] 

…build立图像,并像这样运行:

 docker run -d -p 8080:80 site:latest 

按照预期,该站点可以在127.0.0.1:8080访问。

然而(这是我无法解决的问题)。

由于ng2应用程序使用@angular度/路由器,页面加载时页面url从127.0.0.1:8080更新到127.0.0.1:8080/namedroute。

出于某种原因,PHP中的构build服务器足够聪明,以处理127.0.0.1:8080/namedroute的请求,只是重新加载页面,但httpd返回一个404错误。

由于整个应用程序只是javascript / css / html我有点困惑,为什么PHP可以处理它,但httpd由于某种原因不能。

任何build议是最受欢迎的。

更新1

也尝试过使用Alpine和lighttpd,但是遇到与httpd相同的问题:

 FROM alpine:latest ENV HOME /client/ WORKDIR ${HOME} COPY ./dist ${HOME} COPY ./lighttpd.conf /etc/lighttpd/lighttpd.conf RUN apk add --update --no-cache lighttpd \ && rm -rf /var/cache/apk/* && adduser www-data -G www-data -H -s /bin/false -D EXPOSE 80 ENTRYPOINT ["lighttpd", "-D", "-f", "/etc/lighttpd/lighttpd.conf"] 

更新2

还尝试与Alpine和nginx,这似乎工作:

 FROM alpine:latest ENV HOME /client/ RUN apk add --update nginx && rm -rf /var/cache/apk/* && mkdir -p /run/nginx WORKDIR ${HOME} COPY ./dist ${HOME} COPY ./nginx.conf /etc/nginx/nginx.conf CMD ["nginx"] 

有趣的是看到图像之间的大小差异:

  • lighttpd 11.4 MB
  • httpd 1.11 MB
  • nginx 5.33 MB

虽然你可能会修剪lighttpd和Nginx一点,让他们更小,我很难相信他们将达到busybox中的httpd的大小。

由于我的项目是严格的服务文件(HTML / JS / CSS /图像)所有的服务器都适合的目的和httpd应该是我需要的一切。 但是现在我只能得到nginx与我的ng2应用程序一起工作。 如果有人可以用httpd帮助我,我仍然会喜欢它,但是如果不能用httpd的话,我会在nginx中生存。