我想修改此图像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
?
答案 0 :(得分:2)
根据dockerhub页面上的文档,您需要自己编译scep并自己构建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
如您所见,没有一个层提到scep二进制文件的副本。但是它引用/中的scep二进制文件。但是/文件夹中没有客户端二进制文件。我建议您按照dockerhub(https://hub.docker.com/r/micromdm/scep)所述,检查关联的git存储库并构建scep和docker映像。
编译
要编译SCEP客户端和服务器,有一些要求。
您必须具有Go编译器。编译器通常在golang软件包中。 您必须为$ GOPATH设置一个shell变量。这是Go编译器和实用程序用于所有Go项目的目录。 设置完所有这些后,请使用go get github.com/micromdm/scep克隆存储库。 安装依赖项:make deps 编译服务器和客户端二进制文件:make build二进制文件将在build /文件夹中编译。
docker build
docker build -t working/scep:latest .
docker run
docker run -it --rm -v /path/to/ca/folder:/depot micromdm/scep:latest ca -init
基于该图像
接下来,您可以按照已经描述的那样更改入口点。但是这次,您将在FROM语句中使用新创建的工作/临时图像。
FROM working/scep
ENTRYPOINT ["scepclient"]