有没有一种方法可以让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
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用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.
Run Code Online (Sandbox Code Playgroud)
我也尝试过--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.
Run Code Online (Sandbox Code Playgroud)
如果我首先调用映像中的可执行文件,则可以看到该文件:
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
Run Code Online (Sandbox Code Playgroud)
我无法控制用户将在他们的docker映像中构建什么,因此无法保证任何特定的shell或可执行文件将可用。我需要能够“ docker run -d”他们的映像并确保其继续运行,以便当用户想要与之交互时,我可以使用“ docker exec”。
这可能吗?
不太理想,但是如果无法实现上述目的-是否存在将文件添加到现有容器映像中以实现预期结果的替代方法?
小智 5
它与“如何在busybox中执行二进制文件”有关。
执行命令之前,“ docker run”会挂载卷。
例如,这可以在centos上正常工作:
docker run -v /home/chan:/home/chan centos /home/chan/echo.sh
hello world
Run Code Online (Sandbox Code Playgroud)
要验证是否可以在busybox中执行二进制文件,可以执行
docker run -it -v /Users/nnatara/Desktop:/home/chan busybox sh
/ # cd /home/chan/
/home/chan # ./echo.sh
hello world
Run Code Online (Sandbox Code Playgroud)
就您而言,您可能会在执行二进制文件时遇到问题。
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |