gpt4 book ai didi

docker - "docker run"位于已安装卷中的命令

转载 作者:行者123 更新时间:2023-12-04 18:56:57 24 4
gpt4 key购买 nike

有没有办法让 docker 在创建容器时执行位于已安装卷中的命令?

我有一个简单的 c 程序位于一个目录中,我正在绑定(bind)安装到输出 pwd 的容器,然后运行直到被杀死:

flash@dsvm1:~$ ./hello-docker-mount
Hello from /home/flash!
^C
flash@dsvm1:~$ cat hello-docker-mount.c
#include <stdio.h>
#include <unistd.h>
int main()
{
char cwd[1024];
getcwd(cwd, sizeof(cwd));
printf("Hello from %s!\n", cwd);
for(;;) { sleep(1); }
}
flash@dsvm1:~$ ls /home/flash/hello-docker-mount -al
-rwxrwxr-x 1 flash flash 8728 May 21 22:53 /home/flash/hello-docker-mount

但是,当我尝试使用它作为命令“docker run”时,它似乎失败了,就好像在执行命令后发生了挂载一样:
flash@dsvm1:~$ docker run -it --name foo --rm -v /home/flash:/home/flash busybox /home/flash/hello-docker-mount
standard_init_linux.go:195: exec user process caused "no such file or directory"
flash@dsvm1:~$ docker run -it --name foo --rm -v /home/flash:/home/flash -w /home/flash busybox /home/flash/hello-docker-mount
standard_init_linux.go:195: exec user process caused "no such file or directory"
flash@dsvm1:~$ docker run -it --name foo --rm -v /home/flash:/home/flash -w /home/flash busybox ./hello-docker-mount
standard_init_linux.go:195: exec user process caused "no such file or directory"
flash@dsvm1:~$ docker run -it --name foo --rm -v /home/flash:/home/flash -w /home/flash busybox hello-docker-mount
docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"hello-docker-mount\": executable file not found in $PATH": unknown.

我也尝试了--entrypoint:
flash@dsvm1:~$ docker run -it --name foo --rm -v /home/flash:/home/flash --entrypoint /home/flash/hello-docker-mount busybox
standard_init_linux.go:195: exec user process caused "no such file or directory"
flash@dsvm1:~$ docker run -it --name foo --rm -v /home/flash:/home/flash -w /home/flash --entrypoint hello-docker-mount busybox
docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"hello-docker-mount\": executable file not found in $PATH": unknown.

如果我首先调用镜像中的可执行文件,我可以看到该文件:
flash@dsvm1:~$ docker run -it --name foo --rm -v /home/flash:/home/flash -w /home/flash busybox ls -l hello-docker-mount
-rwxrwxr-x 1 1003 1003 8728 May 21 22:53 hello-docker-mount

我无法控制用户将在他们的 docker 镜像中构建什么,因此无法保证任何特定的 shell 或可执行文件都可用。我需要能够“docker run -d”他们的图像并确保它继续运行,以便当用户想要与之交互时我可以使用“docker exec”。

这可能吗?

不太理想,但如果上述情况不可行 - 是否有另一种方法可以将文件添加到现有容器镜像中以达到预期结果?

最佳答案

它与“如何在busybox中执行二进制”有关。

“docker run”在执行命令之前挂载卷。

例如,这适用于 centos:

docker run -v /home/chan:/home/chan centos /home/chan/echo.sh
hello world

要验证您是否可以在busybox中执行二进制文件,您可以执行
docker run -it -v /Users/nnatara/Desktop:/home/chan busybox sh
/ # cd /home/chan/
/home/chan # ./echo.sh
hello world

在您的情况下,您可能会遇到执行二进制文件的问题。
  • 您需要验证是否为目标编译了二进制文件
    建筑学。
  • 检查是否在
    环境。
  • 关于docker - "docker run"位于已安装卷中的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50458054/

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