Предположим, у меня есть изображение докеров, созданное с использованием файла Docker. Во время написания файла Dockerfile мне пришлось неоднократно тестировать его, чтобы понять, что я сделал неправильно. Чтобы отладить изображение докера, я могу просто запустить тестовый контейнер и посмотреть его stdout/stderr, чтобы увидеть, что не так с изображением.как отлаживать изображения контейнеров с помощью openshift
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
Изучение вышеуказанного было достаточно хорошим, чтобы итеративно создавать и отлаживать минимальный рабочий контейнер Докера. Теперь я ищу способ сделать то же самое для OpenShift.
Я в значительной степени осведомлен о том, что контейнер не готов к OpenShift. Мой план - запустить его и посмотреть его stdoud/stderr, как я сделал с Docker. Один из людей, которых я попросил о помощи, придумал команду, которая была похожа именно на то, что мне нужно.
oc run -i -t --image $IMAGE_NAME --command test-pod -- bash
И вышеприведенная команда, казалось, для меня fedora:24
и fedora:latest
изображений из реестра Докер, и я получил рабочую оболочку. Но то же самое не получилось бы для моего производного изображения с контейнеризованным сервисом. Мое объяснение состоит в том, что он, вероятно, делает совсем другую вещь, и вместо того, чтобы запускать команду в интерактивном режиме, он запускает ее неинтерактивно, а затем пытается запустить bash
внутри отказавшего контейнера.
Так что я ищу разумный способ отладки изображения контейнера в OpenShift. Я ожидал, что смогу, по крайней мере, захватить и посмотреть stdin/stdout контейнеров OpenShift.
Любые идеи?
Update
Согласно комментарию Грэм oc run
действительно должен работать как docker run
но это, кажется, не так. С оригинальными изображениями Fedora bash всегда появляется, по крайней мере, при попадании в enter.
# 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
, поскольку эта команда создает новые и новые контейнеры, которые мне действительно не нужны. Я надеюсь, что есть способ легко начать отладку и впоследствии автоматически уничтожить контейнер.
Когда вы говорите, что «не произошло бы для моего производного изображения с помощью контейнерной службы», что вы на самом деле видели? При использовании '' oc run'' с командой, он ничего не должен запускать и должен просто запускать команду, которую вы ему даете. Поэтому ничто не могло провалиться уже. Кроме того, если вы пытаетесь развернуть приложение, содержащее изображение, вы также можете использовать '' oc debug dc mydcname''. Это запустит контейнер с той же конфигурацией, что и реальное приложение, за исключением присоединения к сеансу терминала и запуска оболочки вместо вашего приложения. –