&引用;docker run“;位于已装入卷中的命令

&引用;docker run“;位于已装入卷中的命令,docker,Docker,有没有办法让docker在创建容器时执行装入卷中的命令 我有一个简单的c程序,它位于一个目录中,我正在绑定挂载到输出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() {

有没有办法让docker在创建容器时执行装入卷中的命令

我有一个简单的c程序,它位于一个目录中,我正在绑定挂载到输出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
我还尝试了--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
在您的情况下,在执行二进制文件时可能会遇到问题

  • 您需要验证是否为目标编译了二进制文件 建筑
  • 检查是否在中找到所需的LIB 环境

谢谢Naveen,你让我尝试一个更全面的图像,比如centos,它在那里按预期工作,这让我意识到我没有静态编译程序,指向你的最后一个要点。:)一旦编译正确,它就可以在busybox甚至hello world映像中工作。“没有这样的文件或目录”只是误导。
docker run -it -v /Users/nnatara/Desktop:/home/chan busybox sh
/ # cd /home/chan/
/home/chan # ./echo.sh
hello world