Docker "исполняемый файл не найден в $ PATH", даже если он добавлен в путь в базовом образе? - PullRequest
1 голос
/ 12 октября 2019

Я хотел бы адаптировать это изображение, https://hub.docker.com/r/micromdm/scep, для запуска scepclient, а не scepserver. Dockerfile для изображения:

FROM alpine:3.6

COPY ./build/scepserver-linux-amd64 /usr/bin/scepserver
COPY ./build/scepclient-linux-amd64 /usr/bin/scepclient

EXPOSE 8080

ENTRYPOINT ["scepserver"]

Я бы хотел, чтобы ENTRYPOINT было ["scepclient"] вместо ["scepserver"], что я попытался сделать, используя следующее Dockerfile:

FROM micromdm/scep

ENTRYPOINT ["scepclient"]

Однако, если я собираю это с помощью docker build . --tag loadtest и пытаюсь запустить его, я получаю следующую ошибку:

> docker run loadtest
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"scepclient\": executable file not found in $PATH": unknown.

Я думал, что исполняемые файлы добавлены в ваш PATH в базеизображение (micromdm/scep) также будет доступно в «производном» изображении, но, похоже, это не так, и я не смог лучше понять это из https://docs.docker.com/engine/reference/builder/#from.

Как использовать образ micromdm/scep, но запустить scepclient вместо scepserver?

1 Ответ

2 голосов
/ 13 октября 2019

В соответствии с документацией на странице dockerhub вам необходимо скомпилировать себя и создать образ docker самостоятельно. https://hub.docker.com/r/micromdm/scep

После извлечения изображения Scep Docker через

docker pull micromdm/scep

вы можете проверить его через

docker history micromdm/scep
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    143554922979        17 months ago       /bin/sh -c #(nop)  CMD ["/scep"]                0B
    <missing>           17 months ago       /bin/sh -c #(nop)  VOLUME [/depot]              0B
    <missing>           17 months ago       /bin/sh -c #(nop)  EXPOSE 8080/tcp              0B
    <missing>           17 months ago       /bin/sh -c apk --no-cache add curl unzip && …   6.84MB
    <missing>           17 months ago       /bin/sh -c #(nop)  ENV SCEP_VERSION=v1.0.0      0B
    <missing>           21 months ago       /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
    <missing>           21 months ago       /bin/sh -c #(nop) ADD file:df48d6d6df42a0138…   3.99MB

Как видите, ни один из слоев не упоминает копиюиз скипа двоичных файлов. Но это относится к бинарному скрипту в /. Однако в папке / нет двоичного файла клиента. Я рекомендую вам проверить связанный репозиторий git и построить scep и образ докера, как описано на dockerhub (https://hub.docker.com/r/micromdm/scep).

Компиляция

Для компиляции клиента и сервера SCEP, есть несколько требований.

Вы должны иметь компилятор Go. Компилятор обычно находится в пакете golang. У вас должна быть переменная оболочки, установленная для $ GOPATH. Это каталог, используемый компилятором Go иутилиты для всех проектов Go. После того, как все они установлены, клонируйте репозиторий с помощью go get github.com/micromdm/scep Установите зависимости: make deps Скомпилируйте двоичные файлы сервера и клиента: make build Двоичные файлы будут скомпилированы в папке build /.

сборка докера

docker build -t working/scep:latest .

запуск докера

docker run -it --rm -v /path/to/ca/folder:/depot micromdm/scep:latest ca -init

построение на этом образе

Далее вы можете изменить точку входа, как вы уже описали. Но на этот раз вы будете использовать вновь созданное изображение рабочего / Scep в вашем операторе FROM.

FROM working/scep

ENTRYPOINT ["scepclient"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...