如何使用openshiftdebugging容器图像

比方说,我有一个使用Dockerfile创build的docker镜像。 在编写Dockerfile的时候,我不得不重复testing一下才知道我做错了什么。 要debugging一个docker镜像,我可以简单地运行一个testing容器,看看它的stdout / stderr,看看这个镜像有什么问题。

IMAGE_NAME=authoritative-dns-bind IMAGE_OPTIONS=" -v $(pwd)/config.yaml:/config.yaml:ro -p 127.0.0.1:53:53 -p 127.0.0.1:53:53/udp" docker run -t -i $IMAGE_OPTIONS $IMAGE_NAME 

学习上述内容足以迭代创build和debugging最小工作的Docker容器。 现在我正在寻找一种方法来为OpenShift做同样的事情。

我很清楚容器没有准备好OpenShift的事实。 我的计划是运行它,像我在Docker一样观察它的stdoud / stderr。 我寻求帮助的一个人拿出了一个看起来正是我所需要的命令。

 oc run -i -t --image $IMAGE_NAME --command test-pod -- bash 

上面的命令对我来说似乎是fedora:24fedora:latest来自dockerregistry的fedora:latest图像,我有一个工作shell。 但是,对于我的导出图像,集装箱化服务也不会发生这种情况。 我的解释是,它可能做了一个完全不同的事情,而不是交互式地启动命令它启动它非交互式,然后尝试在一个失败的容器内运行bash

所以我正在寻找的是在OpenShift中debugging容器图像的合理方法。 我希望能够至less捕获和查看OpenShift容器的stdin / stdout。

有任何想法吗?

更新

根据格雷厄姆的评论, oc run的确应该是docker run但似乎并非如此。 使用原始的Fedora镜像,bash总是至less出现在input中。

 # oc run -i -t --image authoritative-dns-bind --command test-auth13 -- bash Waiting for pod myproject/test-auth13-1-lyng3 to be running, status is Pending, pod ready: false Waiting for pod myproject/test-auth13-1-lyng3 to be running, status is Pending, pod ready: false Waiting for pod myproject/test-auth13-1-lyng3 to be running, status is Pending, pod ready: false ... Waiting for pod myproject/test-auth13-1-lyng3 to be running, status is Pending, pod ready: false ^C # 

我不能尝试build议的oc debug ,因为它似乎需要更多的configuration,而不是简单的图像。 oc run还有另一个问题,因为该命令创build了我并不需要的新容器和新容器。 我希望有一种方法可以很容易地启动debugging,然后让容器自动被破坏。

有三个主要的命令来debugging窗格:

  1. oc describe pod $pod-name – 关于pod的详细信息

  2. oc logs $pod-nameoc logs $pod-name stdout和stderr

  3. oc exec -ti $pod-name -- bash – 在运行pod中获取一个shell

针对您的具体问题: oc run默认拉政策设置为Always 。 这意味着OpenShift将尝试拉取图像直到成功,并拒绝使用本地的图像。

一旦这个kuberenetes补丁登陆OpenShift起源,拉政策将很容易configuration。

编辑:重写

请不要考虑这个问题的最终答案,并用您自己的更好的答案取代它。

我现在正在使用像下面的podconfiguration文件…

 apiVersion: v1 kind: Pod metadata: name: "authoritative-dns-server" # pod name, your reference from command line namespace: "myproject" # default namespace in `oc cluster up` spec: containers: - command: - "bash" image: "authoritative-dns-bind" # use your image! name: "authoritative-dns-bind-container" # required imagePullPolicy: "Never" # important! you want openshift to use your local image stdin: true tty: true restartPolicy: "Never" 

注意命令显式设置为bash 。 然后,您可以创build吊舱,附加到容器并自己运行docker命令。

 oc create -f pod.yaml oc attach -t -i authoritative-dns-server /files/run-bind.py 

这看起来很不理想,它并不能真正帮助你用标准的podconfiguration来debugging普通的openshift容器,但是现在至less可以debugging。 期待更好的答案。