docker - “oc new-app”虽然输入图像不暴露端口
问题描述
我正在探索 OpenShift 3.9,并设法构建并运行了第一个容器以及oc new-app
Docker 构建策略。我的 Dockerfile 包含命令EXPOSE 5432
。
在 rolloutoc 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 文档说明如下:
new-app 命令尝试检测输入图像中暴露的端口。它使用最小数字公开端口来生成公开该端口的服务。为了暴露不同的端口,在 new-app 完成后,只需使用 oc expose 命令生成额外的服务。
为什么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
。
解决方案
最后,问题“突然”消失了,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
端口,还应列出类型为 、、、、和的新 OpenShift(和 Kubernetes)资源。5432/TCP
svc/my_app
deploymentconfigs
buildconfigs
builds
imagestreams
po
rc
- 这种自动机制仅在集群内部公开端口,即
svc/my_app
拥有(并监听)集群IP(不是:外部IP)。 - 附加参数
--dry-run -output json
会导致oc new-app
进行试运行并打印其通常会创建的资源的准确描述(以 JSON 格式)。
推荐阅读
- python - 无法验证 tensorflow 安装 Windown 10
- sql - 计为重复的相似值
- javascript - 如何通过浏览器从 PHP 远程执行 PhantomJS
- node.js - 登录在 Postman 中持续存在,但在使用 Angular 的浏览器中不存在
- javascript - forEach 模仿 .map() 函数
- php - 通过 PHPMailer 发送带有 CSV 附件的电子邮件
- java - 使用 armeria 或 asynchttpclient 代理大文件
- ejabberd - ejabberd muc_sub 从 ejabberd 服务器内为用户订阅房间
- javascript - 如何在 PHP 中使用 POST 方法获取 style="display:none" 值
- hazelcast-jet - Hazelcast-Jet drainTo 语法问题