尽管输入图像暴露了“oc new-app”,但“oc new-app”不会暴露端口

roo*_*099 5 openshift docker

我正在探索 OpenShift 3.9,并成功地使用oc new-appDocker 构建策略构建并运行了第一个容器。我的 Dockerfile 包含命令EXPOSE 5432.

发布后oc describe istag/my_app:latest | grep ^ExposesExposes Ports: 5432/tcp看起来不错:该镜像公开了端口 5432。但据oc describe po/my_app-1-some_id | grep "^\s*Port"报道Port: <none>,总体而言,该端口似乎是在 Docker 级别公开的,但尚未在 Kubernetes/OpenShift 级别公开。

OpenShift 文档说明如下:

new-app 命令尝试检测输入图像中暴露的端口。它使用最低数字公开端口来生成公开该端口的服务。为了公开不同的端口,在 new-app 完成后,只需使用 oc Exposure 命令来生成附加服务。

为什么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
Run Code Online (Sandbox Code Playgroud)

Git 存储库包含一个迄今为止微不足道的内容my_dir/Dockerfile,并且它又包含命令EXPOSE 5432

roo*_*099 2

最后,问题“突然”消失了,oc new-app现在确实暴露了端口(如文档所述)。到目前为止我正在使用Dockerfile这样的小东西

FROM debian:stretch
EXPOSE 5432

COPY start.sh /usr/local/bin/start.sh
CMD ["start.sh"]
Run Code Online (Sandbox Code Playgroud)

哪里startup.sh打电话sleep infinity。在解释方面,我只能猜测我犯了一些次要和暂时的错误,导致了干扰。

以下是尝试诊断和解决问题时吸取的经验教训(非常感谢@GrahamDumpleton):

  • 如果一切顺利oc new-app,应该指示资源的 oc get all端口,并且还应该列出类型为、、、、和的新 OpenShift(和 Kubernetes)资源。5432/TCPsvc/my_appdeploymentconfigsbuildconfigsbuildsimagestreamsporc
  • 这种自动机制仅公开集群内部的端口,即svc/my_app具有(并侦听)集群IP(而不是:外部IP)。
  • 其他参数--dry-run -output json会导致oc new-app进行试运行并打印通常会创建的资源的准确描述(以 JSON 格式)。