我一直在尝试创建我自己的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我可以在我的docker repo中看到这张图片。
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
pensu/busybox latest 8eac78bfc9d6 7 seconds ago 2.476 MB但是当我尝试运行docker时,我总是得到这样的错误:
# 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" 我不能理解为什么它会给出那个错误?我做错了什么吗?否则,我如何验证我创建的是处于工作状态的正确映像?
发布于 2015-04-09 17:54:43
创建镜像后,使用以下命令进行检查:
$ docker inspect $image_name 并检查您在CMD选项中有什么。对于繁忙的盒子,它应该是:
"Cmd": [
"/bin/sh"
]也许您正在覆盖./mkimage.sh中的CMD选项
发布于 2018-03-24 11:09:27
在运行命令时,我遇到了这个错误("stat /bin/bash:没有这样的文件或目录“):
docker exec -it 80372bc2c41e /bin/bash解决方案是识别容器上可用的终端(或shell)的类型。为此,我运行:
docker inspect 80372bc2c41e在该命令的输出中,我看到:
"Cmd": [
"/bin/sh",
"-c",
"gunicorn -b 0.0.0.0:7082 server.app:app"
],这告诉我有一个/bin/sh命令可用,并且我能够连接到:
docker exec -it 80372bc2c41e /bin/sh发布于 2018-10-13 05:41:55
此错误
docker:来自守护进程的错误响应: OCI运行时创建失败: container_linux.go:348:启动容器进程导致"exec:\“//sh\”:stat /bin/sh:没有此类文件或目录“:未知。
从基本映像创建docker映像时发生,例如。scratch。这是因为生成的映像没有用于执行该映像的shell。如果您使用:
ENV EXECUTABLE hello
cmd [$EXECUTABLE]在docker文件中,docker使用/bin/sh解析输入字符串。也因此产生了错误。查看图像,您会发现:
$docker inspect <image-name>
"Entrypoint": [
"/bin/sh",
"-c",
"[$HM_APP]"
]这意味着将使用/bin/sh -c解析入口点或CMD参数。对我有效的解决方案是将命令解析为JSON字符串数组,例如
cmd ["hello"]并再次检查图像:
"Entrypoint": [
"hello"
]这消除了对/bin/sh的依赖,docker应用程序现在可以执行二进制文件。示例:
FROM scratch
# Environmental variables
# Copy files
ADD . /
# Home dir
WORKDIR /bin
EXPOSE 8083
ENTRYPOINT ["hospitalms"]希望这对将来的人有所帮助。
https://stackoverflow.com/questions/29535015
复制相似问题