Попытка получить bash через docker exec, но ничего не работает (контейнер Jaeger) -> Ошибка выполнения OCI во время выполнения - PullRequest
0 голосов
/ 22 октября 2019

Я пытался запустить базовые команды оболочки, например, ls, но любая из них работает. Итак, я попытался проверить, включен ли в контейнере bash, и ответы на похожие сообщения говорят, что он запускается:

docker exec -it amazing_robinson //bin//bash
docker exec -it amazing_robinson /bin/bash
docker exec -it amazing_robinson //bin//sh
docker exec -it amazing_robinson /bin/sh
docker exec -it amazing_robinson sh
docker exec -it amazing_robinson bash

Но любой из них работает (ни один из docker exec -it amazing_robinson ls).

Это ошибка:

OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown

Контейнер

 jaegertracing/example-hotrod:latest

Ответы [ 2 ]

2 голосов
/ 22 октября 2019
FROM scratch
EXPOSE 8080 8081 8082 8083
COPY hotrod-linux /go/bin/
ENTRYPOINT ["/go/bin/hotrod-linux"]
CMD ["all"]

https://github.com/jaegertracing/jaeger/blob/master/examples/hotrod/Dockerfile

Как я вижу, изображение hotrod было построено с нуля. А из концентратора докеров:

"явно пустое изображение, особенно для построения изображений" С нуля "...

" Это изображение наиболее полезно в контексте построения базыизображения (такие как debian и busybox) или супер минимальные изображения (которые содержат только один двоичный файл и все, что требуется, например, hello-world). "

https://hub.docker.com/_/scratch

Итак, я думаю, что внутри этого изображения нет bash

0 голосов
/ 22 октября 2019

Если вы проверите свое базовое изображение оно с нуля.

FROM scratch
EXPOSE 8080 8081 8082 8083
COPY hotrod-linux /go/bin/
ENTRYPOINT ["/go/bin/hotrod-linux"]
CMD ["all"]

Так что Bash, ash нет, так как изображение с нуля, так чтобудет только котнэйн hotrod-linux.

Для получения sh или bash в таких случаях вам нужно использовать многоэтапный Dockerfile, вы можете использовать базовый образ в Dockerfile, а затем копировать двоичные файлы из базового образа в многоэтапный в Dockerfile. Здесь вы идете

FROM jaegertracing/example-hotrod:latest as base
FROM alpine
COPY --from=base /go/bin/hotrod-linux /go/bin/hotrod-linux
ENTRYPOINT ["/go/bin/hotrod-linux"]
CMD ["all"]

, так что теперь вы можете собирать и тестировать, и вы сможете запускать команды внутри контейнера с помощью docker exec, вот пример

docker build -t myimage .

docker run -dit --name test myimage

#now run
docker exec -it test ash
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...