gpt4 book ai didi

image - Docker:standard_init_linux.go:211:exec用户进程导致 "no such file or directory"

转载 作者:行者123 更新时间:2023-12-04 19:26:04 28 4
gpt4 key购买 nike

我正在尝试按照官方docker网页(https://docs.docker.com/samples/library/scratch/)中给出的说明创建基础镜像

    docker --version
Docker version 18.09.6, build 481bc77

OS Details:
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"

DockerFile:
    FROM scratch
COPY hello /
CMD ["/hello"]

你好ç
    #include <stdio.h>
int main()
{
// printf() displays the string inside quotation
printf("Hello, World!");
return 0;
}

我能够编译C程序并在本地执行

我可以使用dockerfile构建镜像,但是当我尝试运行容器时,出现以下错误:
    # docker run -i hello
standard_init_linux.go:211: exec user process caused "no such file or directory"
#

我希望该容器能够成功运行,并在控制台上打印“Hello World”。
提供的大多数答案都要求更改EOL,这是不适用的,因为我们已经在Linux上并且没有尝试运行脚本。

最佳答案

我猜您会收到此错误,因为您构建了一个动态链接二进制文件,如下所示:

$ gcc -o hello hello.c
$ ldd hello
linux-vdso.so.1 (0x00007ffe3b1ec000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7fe1fc7000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7fe25ba000)
scratch确实是基本的,对于二进制到动态链接,没有太多的 so。因此,您需要构建一个静态链接二进制文件,例如:
$ gcc -o hello -static hello.c
$ ldd hello
not a dynamic executable

然后,它将像下一个一样工作:
$ docker build -t hello .
Sending build context to Docker daemon 848.4kB
Step 1/3 : FROM scratch
--->
Step 2/3 : COPY hello /
---> 9d594b34f774
Step 3/3 : CMD ["/hello"]
---> Using cache
---> 2f1bad3099d3
Successfully built 2f1bad3099d3
Successfully tagged hello:latest
$ docker run -i hello
Hello, World!

并且,如果您不使用系统中包含更多 scratch.so图像,则无需构建静态二进制文件。

关于image - Docker:standard_init_linux.go:211:exec用户进程导致 "no such file or directory",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56832363/

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