OCI runtime exec failed: exec failed: (...) executable file not found in $PATH": unknown

DockerFfmpeg

Docker Problem Overview


I have dockerized an app which has ffmpeg installed in it via libav-tools. The app launches without problem, yet the problem occured when fluent-ffmpeg npm module tried to execute ffmpeg command, which was not found. When I wanted to check the version of the ffmpeg and the linux distro set up in the image, I used sudo docker exec -it c44f29d30753 "lsb_release -a" command, but it gave the following error: OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused "exec: \"lsb_release -a\": executable file not found in $PATH": unknown

Then I realized that it gives me the same error with all the commands that I try to run inside the image or the container.

OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused "exec: \"ffmpeg -a\": executable file not found in $PATH": unknown

This is my Dockerfile:

FROM ubuntu:xenial
FROM node
RUN apt-get -y update
RUN apt-get --yes install libav-tools
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm install
COPY . /usr/src/app
RUN npm run build
ENV NODE_ENV production
EXPOSE 8000
CMD ["npm", "run", "start:prod"]

I would kindly ask for your help. Thank you very much!

Docker Solutions


Solution 1 - Docker

This happened to me on windows. Any of these commands will work

On Windows CMD (not switching to bash):

docker exec -it <container-id> /bin/sh

On Windows CMD (after switching to bash):

docker exec -it <container-id> //bin//sh

or

winpty docker exec -it <container-id> //bin//sh

On Git Bash:

winpty docker exec -it <container-id> //bin//sh

For Windows users, the reason is documented in the ReleaseNotes file of Git and it is well explained here - Bash in Git for Windows: Weirdness... :

> The cause is to do with trying to ensure that posix paths end up being > passed to the git utilities properly. For this reason, Git for Windows > includes a modified MSYS layer that affects command arguments.

Linux & Windows Users

You might need to run using /bin/bash or /bin/sh, depending on the shell in your container. Using shell instead of bash or vice versa will also give you this error.

Solution 2 - Docker

docker exec -it <containerId> sh

Solution 3 - Docker

I had this due to a simple ordering mistake on my end. I called

When I should have used

Same resolution on similar question: https://stackoverflow.com/a/50762266/6278

Solution 4 - Docker

If @papigee does solution doesn't work, maybe you don't have the permissions.

I tried @papigee solution but does't work without sudo.

I did :

sudo docker exec -it <container id or name> /bin/sh

Solution 5 - Docker

Get rid of your quotes around your command. When you quote it, docker tries to run the full string "lsb_release -a" as a command, which doesn't exist. Instead, you want to run the command lsb_release with an argument -a, and no quotes.

sudo docker exec -it c44f29d30753 lsb_release -a

Note, everything after the container name is the command and arguments to run inside the container, docker will not process any of that as options to the docker command.


For others with this error, the debugging steps I'd recommend:

  • Verify the order of your arguments. Everything after the container name/id is a command to run. So you don't want docker exec $cid -it /bin/sh because that will try to run the command -it in the $cid container. Instead you want docker exec -it $cid /bin/sh

  • Look at the command that is failing, everything in the quotes after the exec error (e.g. lsb_release -a in "exec: \"lsb_release -a\") is the binary trying to be run. Make sure that binary exists in your image. E.g. if you are using alpine or busybox, bash may not exist, but /bin/sh does. And that binary is the full string, e.g. you would be able to run something like ls "/usr/bin/lsb_release -a" and see a file with the space and -a in the filename.

  • If you're using Windows with Git bash and see a long path prefixed on that command trying to be run, that's Git bash trying to do some automatic conversions of /path/to/binary, you can disable that by doubling the first slash, e.g. //bin/sh.

  • If the command you're running is a script in the container, check the first line of that script, containing the #!/path/to/interpreter, make sure that interpreter exists in the image, at that path, and that the script is saved with linux linefeeds (lf, not cr+lf, you won't want the \r showing in the file when read in linux because that becomes part of the command it's looking to execute).

  • If you don't have a full path to the binary in the command you're running, check the value of $PATH in the image, and verify the binary exists within one of those directories. E.g. you can docker exec -it $cid /bin/sh and echo $PATH and type some_command to verify some_command is found in your path.

  • If your command is not an executable, but rather a shell builtin, you'll need to execute it with a shell instead of directly. That can be done with docker exec -it $cid /bin/sh -c "your_shell_builtin"

Solution 6 - Docker

I solved this with this commands:

  1. Run the container:
    docker run -d <image-name>
    
  2. List containers:
    docker ps -a
    
  3. Use the container ID:
    docker exec -it <container-id> /bin/sh
    

Solution 7 - Docker

I was running into this issue and it turned out that I needed to do this:

docker run ${image_name} bash -c "${command}"

Solution 8 - Docker

You can use another shell to execute the same command:

Error I get when i execute:

[jenkins@localhost jenkins_data]$ docker exec -it mysqldb \bin\bash
OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"binsh\": executable file not found in $PATH": unknown

Solution: When I execute it with below command, using bash shell it works:

[jenkins@localhost jenkins_data]$ docker exec -it mysqldb bash
root@<container-ID>:/#

Solution 9 - Docker

What I did to solve was simply:

  1. Run docker ps -a
  2. Check for the command of the container (mine started with /bin/sh)
  3. Run docker-compose exec < name_of_service > /bin/sh (if that is what started your command

This is for solving when using docker compose

Solution 10 - Docker

This has happened to me. My issue was caused when I didn't mount Docker file system correctly, so I configured the Disk Image Location and re-bind File sharing mount, and this now worked correctly. For reference, I use Docker Desktop in Windows.

Solution 11 - Docker

In my case i saved the docker image and instead of load-ing it on the other machine i imported it which are very different and lead me to an error similar to this.

Solution 12 - Docker

you have to run like below:

docker exec sh -c 'echo "$ENV_NAME"'

Solution 13 - Docker

I had windows line endings in a shell script. change to LF dos2unix

Solution 14 - Docker

I was running a container in a docker-compose.

entrypoint:
  - ls

worked, but

entrypoint:
   - ls tests

did not.

It's because the arguments have to be on separate lines.. 臘‍♂

entrypoint:
   - ls 
   - tests

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionUğur KayaView Question on Stackoverflow
Solution 1 - DockerpapigeeView Answer on Stackoverflow
Solution 2 - DockerBijaya Kumar OliView Answer on Stackoverflow
Solution 3 - DockerHenrik HeimbuergerView Answer on Stackoverflow
Solution 4 - DockerJesús Daniel Medina CruzView Answer on Stackoverflow
Solution 5 - DockerBMitchView Answer on Stackoverflow
Solution 6 - DockerCarlos MarcanoView Answer on Stackoverflow
Solution 7 - DockerLucidIguanaView Answer on Stackoverflow
Solution 8 - DockerJagdish0886View Answer on Stackoverflow
Solution 9 - DockerBoluwatife FakoredeView Answer on Stackoverflow
Solution 10 - DockerRand ChenView Answer on Stackoverflow
Solution 11 - DockerHooloovooView Answer on Stackoverflow
Solution 12 - DockerVishal ChaudharyView Answer on Stackoverflow
Solution 13 - DockerDave HornerView Answer on Stackoverflow
Solution 14 - DockerPickledView Answer on Stackoverflow