我一直在尝试创建自己的busybox基本映像.
# ./mkimage.sh -t pensu/busybox busybox-static
+ mkdir -p /var/tmp/docker-mkimage.US3tHy0uBQ/rootfs
+ tar --numeric-owner -caf /var/tmp/docker-mkimage.US3tHy0uBQ/rootfs.tar.xz -C /var/tmp/docker-mkimage.US3tHy0uBQ/rootfs '--transform=s,^./,,' .
+ cat > '/var/tmp/docker-mkimage.US3tHy0uBQ/Dockerfile'
+ rm -rf /var/tmp/docker-mkimage.US3tHy0uBQ/rootfs
+ docker build -t pensu/busybox /var/tmp/docker-mkimage.US3tHy0uBQ
Sending build context to Docker daemon 863.2 kB
Sending build context to Docker daemon
Step 0 : FROM scratch
--->
Step 1 : ADD rootfs.tar.xz /
---> 8eac78bfc9d6
Removing intermediate container ad9bbb8f7536
Successfully built 8eac78bfc9d6
+ rm -rf /var/tmp/docker-mkimage.US3tHy0uBQ
Run Code Online (Sandbox Code Playgroud)
我可以看到我的docker repo可以使用该图像.
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
pensu/busybox latest 8eac78bfc9d6 7 seconds ago 2.476 MB
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用docker run时,我总是得到错误:
# docker run -it pensu/busybox /bin/sh
exec: "/bin/sh": stat /bin/sh: no such file or directorytime="2015-04-09T16:03:45+05:30" level="fatal" msg="Error response from daemon: Cannot start container 8fe73b7832193c847d7975175a4be86d1f0b550b6a00b812bd4cdd18fe752468: exec: \"/bin/sh\": stat /bin/sh: no such file or directory"
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么会出现这个错误?难道我做错了什么?我怎样才能验证我正在创建一个处于工作状态的正确图像?
wsl*_*wsl 23
创建图像后,请检查:
$ docker inspect $ image_name
并检查你在CMD选项中有什么,对于忙箱,它应该是:"Cmd":["/ bin/sh"]也许你在./mkimage.sh中覆盖了CMD选项
duh*_*ime 13
我在运行命令时遇到了这个错误("stat/bin/bash:没有这样的文件或目录"):
docker exec -it 80372bc2c41e /bin/bash
Run Code Online (Sandbox Code Playgroud)
解决方案是确定容器上可用的终端(或shell)的类型.为此,我跑了:
docker inspect 80372bc2c41e
Run Code Online (Sandbox Code Playgroud)
在该命令的输出中,我看到:
"Cmd": [
"/bin/sh",
"-c",
"gunicorn -b 0.0.0.0:7082 server.app:app"
],
Run Code Online (Sandbox Code Playgroud)
这告诉我有一个/bin/sh可用的命令,我能够连接:
docker exec -it 80372bc2c41e /bin/sh
Run Code Online (Sandbox Code Playgroud)
Tre*_*yan 11
使用$ docker inspectIncase 图像/bin/bash在输出中没有,您可以使用以下命令:它对我来说完美无缺
$ docker exec -it <container id> sh
Run Code Online (Sandbox Code Playgroud)
这个错误
泊坞窗:来自守护程序的错误响应:OCI运行时创建失败:container_linux.go:348:启动容器进程引起“ exec:\” / bin / sh \”:stat / bin / sh:无此类文件或目录”:未知。
从基本映像创建docker映像时发生 scratch。这是因为生成的图像没有外壳来执行该图像。如果您使用:
ENV EXECUTABLE hello
cmd [$EXECUTABLE]
Run Code Online (Sandbox Code Playgroud)
在您的docker文件中,docker使用/ bin / sh解析输入字符串。因此错误。检查图像,您会发现:
$docker inspect <image-name>
"Entrypoint": [
"/bin/sh",
"-c",
"[$HM_APP]"
]
Run Code Online (Sandbox Code Playgroud)
这意味着ENTRYPOINT或CMD参数将使用/ bin / sh -c进行解析。对我有用的解决方案是将命令解析为字符串的JSON数组,例如
cmd ["hello"]
Run Code Online (Sandbox Code Playgroud)
并再次检查图像:
"Entrypoint": [
"hello"
]
Run Code Online (Sandbox Code Playgroud)
这消除了对/ bin / sh的依赖,docker应用程序现在可以执行二进制文件。例:
FROM scratch
# Environmental variables
# Copy files
ADD . /
# Home dir
WORKDIR /bin
EXPOSE 8083
ENTRYPOINT ["hospitalms"]
Run Code Online (Sandbox Code Playgroud)
希望这对以后的人有所帮助。
在使用 Docker Toolbox/Machine 的 Windows (msys) 上,我必须/在之前添加一个额外的内容/bin/bash以表明它是一个 *nix 文件路径。
所以,
docker run --rm -it <image>:latest //bin/bash
小智 5
cmd使用命令检查您的图像docker inspect image_name。输出可能是这样的:
"Cmd": [
"/bin/bash",
"-c",
"#(nop) ",
"CMD [\"/bin/bash\"]"
],
Run Code Online (Sandbox Code Playgroud)
所以使用命令docker exec -it container_id /bin/bash。如果你的cmd输出不同,如下所示:
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"/bin/sh\"]"
],
Run Code Online (Sandbox Code Playgroud)
在上面的命令中使用/bin/sh代替。/bin/bash
| 归档时间: |
|
| 查看次数: |
50294 次 |
| 最近记录: |