做镜像时候忘记expose端口了, 或者要做一个通用的镜像, expose端口不固定, 又要在k8s环境里跑并暴漏服务访问,怎么破?
实际上: yaml的 ports: - containerPort: 8000相当于 docker run --expose
构建无expose的镜像
[root@n1 pyhttp]# cat Dockerfile from ubuntu:14.04workdir /#expose 8000entrypoint ["python3", "-m", "http.server"]docker build -t pyhttp .
启动后访问
docker run --expose 8000 -p 8000:8000 -itd pyhttp
pyhttp在k8s环境中跑
[root@n1 pyhttp]# cat pyhttp.yaml apiVersion: v1kind: Podmetadata: name: pyhttp labels: name: pyhttpspec: containers: - name: pyhttp image: pyhttp imagePullPolicy: IfNotPresent ports: - containerPort: 8000[root@n1 pyhttp]# cat pyhttp-svc.yaml apiVersion: v1kind: Podmetadata: name: pyhttp labels: name: pyhttpspec: containers: - name: pyhttp image: pyhttp imagePullPolicy: IfNotPresent
观察pyhttp的pod和svc状态如下
![806469-20180125105138850-1149321975.png](https://images2017.cnblogs.com/blog/806469/201801/806469-20180125105138850-1149321975.png)
启动一个curl镜像验证svc
kubectl run -it --rm --restart=Never curl --image=appropriate/curl sh