如何使用openshift

时间:2017-01-20 20:00:08

标签: docker openshift fedora

让我们说我有一个使用Dockerfile创建的docker镜像。在编写Dockerfile时,我不得不反复测试它以实现我做错了什么。要调试docker镜像,我可以简单地运行一个测试容器,然后查看它的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

学习上述内容足以迭代地创建和调试最小的工作Docker容器。现在我正在为OpenShift寻找一种方法。

我非常清楚容器还没有为OpenShift做好准备。我的计划是运行它并像使用Docker一样观察它的stdoud / stderr。我请求帮助的人之一想出了一个看起来就像我需要的命令。

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

上面的命令对我来说似乎来自docker注册表的fedora:24fedora:latest图像,我得到了一个工作shell。但是,对于我的派生图像,使用容器化服务也不会发生同样的情况。我的解释是,它可能完全不同,它不是以交互方式启动命令,而是以非交互方式启动它,然后尝试在失败的容器内运行bash

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

有什么想法吗?

更新

根据格雷厄姆oc run的评论确实应该像docker run一样工作,但似乎并非如此。使用原始的Fedora图像,bash总是至少在出现时出现。

# 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
# 

我无法试用建议的oc debug,因为它似乎需要更多配置,而不仅仅是简单的图像。 oc run存在另一个问题,因为该命令会创建我不太需要的新容器。我希望有一种方法可以轻松地启动调试,然后让容器自动解除。

2 个答案:

答案 0 :(得分:2)

调试pod有三个主要命令:

  1. oc describe pod $pod-name - 有关广告连播的详细信息

  2. oc logs $pod-name - 广告连播的stdout和stderr

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

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

    一旦this kuberenetes patch登陆OpenShift,可以轻松配置提取政策。

    编辑:重写

答案 1 :(得分:0)

请不要将此视为问题的最终答案,并以您自己更好的答案取而代之......

我现在正在使用如下的pod配置文件......

lst.split()

请注意,该命令已明确设置为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" 。然后,您可以创建窗格,附加到容器并自行运行docker命令。

bash

这看起来很不理想,它并没有真正帮助您调试具有标准pod配置的普通openhift容器,但至少现在可以进行调试。期待更好的答案。