我正在运行Docker for Windows和Minikube(Kubernetes)来为Angular应用程序提供服务。角度应用程序使用ng serve
提供,并在Windows上正常工作。我创建了下面的Dockerfile:
# Use an official Nodejs runtime as a parent image
FROM node:6.10.3
#Create an unprivileged user 'app'
#Install dependencies
RUN useradd --user-group --create-home --shell /bin/false app &&\
npm install -g grunt-cli &&\
npm install -g @angular/cli
# Define environment variable
ENV ENVIRONMENT="dev" HOME=/home/app
#Copy the code to the image
COPY . $HOME/frontend/
#Chmod the files to allow unprivileged user 'app' to read/write
RUN chown -R app:app $HOME/*
#Use unprivileged user 'app' to run the app inside the container
USER app
#Set Current Working Directory of the runtime
WORKDIR $HOME/frontend
#Install NPM dependencies
RUN npm install
# Make port 8080 and 4200 available to the world outside this container
EXPOSE 4200
# Start the webpack server when the container launches
CMD ng serve
我在windows中为minikube设置了我的环境变量以及我的Docker变量(minikube docker-env)
DOCKER_API_VERSION
DOCKER_CERT_PATH
DOCKER_HOST
DOCKER_MACHINE_NAME
DOCKER_TLS_VERIFY
我构建了Docker镜像并将其标记为v1:
docker build -t frontend:v1 .
我从图像中部署了POD并公开了部署:
kubectl run frontend --image=frontend:v1 --port=4200
kubectl expose deployment frontend --type=LoadBalancer
kubectl get pods
显示我的广告连播正在投放,而kubectl get deployments
显示我的部署可用
我使用kubectl exec curl localhost:4200
执行卷曲,该卷曲在容器上执行,并且正确返回我的页面但是当我尝试使用minikube service frontend
运行我的服务时,它会打开浏览器但无法访问我的申请。
值得注意的是,我使用node server.js
运行的普通Nodejs应用程序执行了相同的步骤,并使用相同的步骤正确提供。
任何想法为什么我的角度应用程序在开始使用ng服务时没有服务于Kubernetes或者如何解决问题是什么?我可以看到Kubernetes Dashboard中的映射是正确的。
答案 0 :(得分:1)
这可能与 angular-cli 更相关。 ng serve
默认仅绑定到localhost
。因此,您的docker容器没有监听它的公共IP地址。
尝试使用:
ng serve --host 0.0.0.0
答案 1 :(得分:0)
Minikube并不真正支持LoadBalancer的服务类型。它不会呕吐,但你应该读一读它的真正含义。做
minikube service list
查看您可以点击的实际端点。塞巴斯蒂安的观点可能仍然适用
答案 2 :(得分:-1)
尝试公开端口80
而不是4200
,即
kubectl run frontend --image=frontend:v1 --port=80