我正在研究OpenShift 3.9,并设法通过oc new-app
和Docker构建策略构建并运行了第一个容器。我的Dockerfile包含命令EXPOSE 5432
。
首次发布后,oc describe istag/my_app:latest | grep ^Exposes
报告了Exposes Ports: 5432/tcp
,因此看起来不错:该图像公开了端口5432。但是oc describe po/my_app-1-some_id | grep "^\s*Port"
报告了Port: <none>
,因此总体看来该端口在Docker级别公开,但在Kubernetes / OpenShift级别尚未公开。
new-app命令尝试检测输入图像中的暴露端口。 它使用最低的数字暴露端口来生成服务, 暴露该端口。为了公开其他端口,在new-app之后 已经完成,只需使用oc暴露命令生成其他 服务。
在这种情况下,oc new-app
为什么不公开端口5432(实际上它也不会创建任何service
资源),我如何使其自动完成,因为输入图像已经做到了,并且从文档来看似乎可行吗?
更新,以下是有关如何创建新应用程序的更多详细信息:
oc new-app ssh://my_account@my_git_server/my_path/my_repo.git
--context-dir=my_dir --strategy=docker --name my_app
到目前为止,Git存储库包含一个普通的my_dir/Dockerfile
,而它又包含了命令EXPOSE 5432
。
答案 0 :(得分:1)
最后,问题“突然”消失了,oc new-app
现在确实暴露了该端口(如文档所述)。到目前为止,我正在使用这样的琐碎Dockerfile
FROM debian:stretch
EXPOSE 5432
COPY start.sh /usr/local/bin/start.sh
CMD ["start.sh"]
其中startup.sh
调用sleep infinity
。在解释方面,我只能猜测我犯了一些导致干扰的次要和暂时性错误。
以下是尝试诊断和解决问题时的经验教训(非常感谢@GrahamDumpleton):
oc new-app
,oc get all
应该为资源5432/TCP
指明端口svc/my_app
,并且还应该列出类型{{1}的新OpenShift(和Kubernetes)资源。 }},deploymentconfigs
,buildconfigs
,builds
,imagestreams
和po
。rc
具有(并监听)群集IP(而非外部IP)。svc/my_app
使--dry-run -output json
进行试运行并打印(通常以JSON格式)其通常会创建哪些资源的准确描述。