94

I have been trying to create my own busybox base image.

# ./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

I can see the image is available with my docker repo.

# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
pensu/busybox latest 8eac78bfc9d6 7 seconds ago 2.476 MB

But when I try to do docker run, I always get the error:

# 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" 

I am not able to understand why is it giving that error? Am I doing something wrong? How else can I validate that I am creating a correct image that is in working condition?

asked Apr 9, 2015 at 9:43
2
  • 1
    in my case, it was: the wrong endlines into shell file. Replacing to Unix style was help me Commented Oct 4, 2022 at 8:27
  • In my case, I had failed to specify a WORKDIR, and I had a COPY . . which was using my local ./bin to overwrite /bin in the container. Commented Sep 20, 2023 at 22:14

8 Answers 8

91

After you create image, check it with:

$ docker inspect $image_name 

and check what you have in CMD option. For busy box it should be:

"Cmd": [
 "/bin/sh"
]

Maybe you are overwritting CMD option in your ./mkimage.sh

Adrian Mole
52.2k193 gold badges62 silver badges101 bronze badges
answered Apr 9, 2015 at 9:54
Sign up to request clarification or add additional context in comments.

8 Comments

"Cmd": [ "/bin/sh", "-c", "#(nop) ADD file:905ed83e56295de9b6eb24708b583e78e4e9a06d3a80184276b55b5db04d70aa in /" ], It is /bin/sh only.
If You want to run container You must provide task which will be performed by container, rigth now docker is executing /bin/sh. For example if you want to run jar inside your container try java -jar yourjar.jar
That's what I am thinking about. Is it not possible to get an interactive shell with an busybox image? What else could I run inside a busybox container?
@wsl, that link is about running Java in docker. This question has nothing to do with Java.
The comment above says "Cmd": [ "/bin/sh", "-c", "#(nop) ADD file:905ed83e56295de9b6eb24708b583e78e4e9a06d3a80184276b55b5db04d70aa in /" ] - notice the ADD stuff; you have a typo in your Dockerfile.
|
50

Using $ docker inspect [imageID] Incase the Image has no /bin/bash in the output, you can use command below: it worked for me perfectly

$ docker exec -it <container id> sh

The -it flags let you interact with a container by allocating a pseudo-tty and keeping stdin open.

answered Oct 15, 2020 at 9:28

1 Comment

OCI runtime exec failed: exec failed: unable to start container process: exec: "sh": executable file not found in $PATH: unknown
45

I hit this error ("stat /bin/bash: no such file or directory") when running the command:

docker exec -it 80372bc2c41e /bin/bash

The solution was to identify the kind of terminal (or shell) that is available on the container. To do so, I ran:

docker inspect 80372bc2c41e

In the output from that command, I saw:

"Cmd": [
 "/bin/sh",
 "-c",
 "gunicorn -b 0.0.0.0:7082 server.app:app"
],

This tells me that there's a /bin/sh command available, and I was able to connect with:

docker exec -it 80372bc2c41e /bin/sh
answered Mar 24, 2018 at 3:09

2 Comments

What if there is null in CMD part?
Hmm that should mean there's no command being run in your container. Do you have a link to the Dockerfile?
18

This error

docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory": unknown.

occurs when creating a docker image from base image eg. scratch. This is because the resulting image does not have a shell to execute the image. If your use:

ENV EXECUTABLE hello
cmd [$EXECUTABLE]

in your docker file, docker uses /bin/sh to parse the input string. and hence the error. Inspecting on the image, your will find:

$docker inspect <image-name>
"Entrypoint": [
 "/bin/sh",
 "-c",
 "[$HM_APP]"
 ]

This means that the ENTRYPOINT or CMD arguments will be parsed using /bin/sh -c. The solution that worked for me is to parse the command as a JSON array of string e.g.

cmd ["hello"]

and inspecting the image again:

"Entrypoint": [
 "hello"
 ]

This removes the dependence on /bin/sh the docker app can now execute the binary file. Example:

FROM scratch
# Environmental variables
# Copy files
ADD . /
# Home dir
WORKDIR /bin
EXPOSE 8083
ENTRYPOINT ["hospitalms"]

Hope this helps someone in future.

answered Oct 12, 2018 at 21:41

3 Comments

As of Docker 1.5.0 (specifically, docker/docker#8827), FROM scratch is a no-op in the Dockerfile. Using the scratch "image" signals to the build process that you want the next command in the Dockerfile to be the first filesystem layer in your image. This means that your container does not contain /bin/sh, or anything else (other than the linux kernel i assume)
Yes, you don't have a kernel attached to the image. Running any Linux command or docker shell dependent command will fail.
adding WORKDIR /bin in my Dokerfile solve for me
7

On Windows (msys) using Docker Toolbox/Machine, I had to add an extra / before /bin/bash to indicate that it was a *nix filepath.

So, docker run --rm -it <image>:latest //bin/bash

answered May 11, 2020 at 19:28

1 Comment

What a great little trick. I did not know about this.
5

check your image cmd using the command docker inspect image_name . The output might be like this:

"Cmd": [
 "/bin/bash",
 "-c",
 "#(nop) ",
 "CMD [\"/bin/bash\"]"
],

So use the command docker exec -it container_id /bin/bash. If your cmd output is different like this:

"Cmd": [
 "/bin/sh",
 "-c",
 "#(nop) ",
 "CMD [\"/bin/sh\"]"
],

Use /bin/sh instead of /bin/bash in the command above.

helvete
2,73715 gold badges38 silver badges42 bronze badges
answered Sep 17, 2020 at 12:01

Comments

1

I had a similar problem:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown.

In my case, I know the image works in other places, then was a corrupted local image. I solved the issue removing the image (docker rmi <imagename>) and pulling it again(docker pull <imagename>).

I did a docker system prune too, but I think it's not mandatory.

answered Dec 10, 2019 at 23:30

Comments

0

Explicitly mention the ubuntu version in the docker file which you are trying to RUN,

FROM ubuntu:14.04

Dont use like FROM ubuntu:Latest. This resolved my above "Cannot Start Container: stat /bin/sh: no such file or directory" issue

A.H.
66.8k16 gold badges98 silver badges133 bronze badges
answered Oct 6, 2016 at 5:02

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.