gpt4 book ai didi

go - 在 docker 容器中生成一个新进程,该进程是从头开始构建的

转载 作者:IT王子 更新时间:2023-10-29 02:12:31 32 4
gpt4 key购买 nike

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

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:没有这样的文件或目录”。但是,“第二个”二进制文件确实存在。在这两种情况下都使用 docker engine 1.13.1。

如果父镜像从 scratch 更改为 debian:jessie,它也有效。

草稿图像是否有任何我不知道的限制?

最佳答案

对于临时镜像,不会有 libc(或任何共享库)。如果它在 debian 上运行良好,那么我怀疑二进制文件不是静态链接的,这是正常的默认设置。尝试 CGO_ENABLED=0 go build -a -installsuffix cgo,如此处所示 http://www.blang.io/posts/2015-04_golang-alpine-build-golang-binaries-for-alpine-linux/

关于go - 在 docker 容器中生成一个新进程,该进程是从头开始构建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42221207/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com