“ oc new-app”不会在输入图像中显示端口

时间:2018-08-08 14:04:05

标签: docker openshift

我正在研究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级别尚未公开。

OpenShift documentation说:

  

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

1 个答案:

答案 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-appoc get all应该为资源5432/TCP指明端口svc/my_app,并且还应该列出类型{{1}的新OpenShift(和Kubernetes)资源。 }},deploymentconfigsbuildconfigsbuildsimagestreamspo
  • 此自动机制仅在端口内部公开端口 群集,即rc具有(并监听)群集IP(而非外部IP)。
  • 附加参数svc/my_app使--dry-run -output json进行试运行并打印(通常以JSON格式)其通常会创建哪些资源的准确描述。