2017-02-14 19 views
1

我正在尝试构建包含2个可执行二进制文件的最小码头镜像(FROM scratch)。两者都是用Go构建的二进制文件。入口点设置为第一个。它在图像上获取一些数据,使用环境变量对其进行转换,启动一个执行第二个二进制文件的新进程,并将数据作为生成进程的输入进行管道传输。在Docker容器中产生一个新的进程,从头开始构建镜像

FROM scratch 
COPY bin /opt/my-app 
ENTRYPOINT ["/opt/my-app/first", "--run", "/opt/my-app/second"] 

当我在我的Mac上构建这个图像时,一切工作正常。但是当它在运行linux的构建服务器上创建时,第一个进程无法启动第二个进程。它失败,出现错误“fork/exec/opt/my-app/second:没有这样的文件或目录”。但是,“秒”二进制确实存在。在这两种情况下都使用码头引擎1.13.1。

如果父图像从scratch更改为debian:jessie,它也可以使用。

我没有意识到刮痕图像有任何限制吗?

+0

二进制文件是静态链接的吗?使用临时图像时,不会有libc(或任何共享库)。如果它在debian上正常工作,那么我怀疑二进制文件不是静态链接的,这是正常的默认设置。尝试CGO_ENABLED = 0去建立-a -installsuffix cgo,看看这里http://www.blang.io/posts/2015-04_golang-alpine-build-golang-binaries-for-alpine-linux/ – foo

+0

感谢您的提示,设置CGO_ENABLED = 0确实有帮助。如果你把它作为答案发布,我会很乐意接受:) –

回答

相关问题