在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中生存。