首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Docker在$PATH中找不到`/bin/sh`的可执行文件?

Docker在$PATH中找不到/bin/sh的可执行文件的原因可能是由于以下几个因素:

  1. Docker镜像问题:Docker镜像中可能没有包含/bin/sh可执行文件。在某些基于Alpine Linux的镜像中,/bin/sh实际上是一个符号链接,指向/bin/ash,而不是标准的Bourne shell。因此,如果你在Docker容器中使用/bin/sh,可能会找不到该可执行文件。
  2. 系统环境问题:在某些情况下,宿主机的环境变量配置可能导致Docker无法找到/bin/sh。确保宿主机的环境变量配置正确,并且/bin/sh在$PATH中。

解决这个问题的方法有以下几种:

  1. 使用绝对路径:如果你确定Docker镜像中存在/bin/sh可执行文件,可以尝试使用绝对路径来执行它,例如/bin/sh
  2. 使用其他可执行文件:如果你在Docker容器中需要一个可执行的shell,但/bin/sh不可用,可以尝试使用其他可执行文件,如/bin/bash/bin/ash
  3. 检查Docker镜像:如果问题仍然存在,检查你使用的Docker镜像是否正确配置了/bin/sh。你可以查看镜像的Dockerfile或者尝试使用其他镜像来验证。

需要注意的是,以上解决方法仅供参考,具体解决方案可能因环境和使用情况而异。在实际应用中,建议根据具体情况进行调试和排查。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Dockerfile(9) - ENTRYPOINT 指令详解

,该入口命令会在启动容器时作为根命令执行,所有其他传入值作为该命令的参数 ENTRYPOINT 的值可以通过 来覆盖掉 docker run --entrypoint 只有 Dockerfile 中的最后一条...看到可执行文件找不到的报错,executable file not found 跟在镜像名后面的是 command,运行时会替换 CMD 的默认值,因此这里的 -l 替换了原来的 CMD,而不是追加在原来的...ls -a 后面 而 -l 根本不是命令,所以自然找不到 如果想加入 -i 参数,必须重写 ls 命令 > docker run test ls -a -l total 56 drwxr-xr-x...ENTRYPOINT ["docker-entrypoint.sh"] EXPOSE 6379 CMD [ "redis-server" ] docker-entrypoint.sh #!.../bin/sh ... # allow the container to be started with `--user` if [ "$1" = 'redis-server' -a "$(id -u)

25.9K43

Docker Dockerfile 指令详解与实战案例

Dockerfile介绍 Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 在Docker中创建镜像最常用的方式,就是使用Dockerfile。...在 Docker 官方的 Dockerfile 最佳实践文档 中要求,尽可能的使用 COPY,因为 COPY 的语义很明确,就是复制文件而已,而 ADD 则包含了更复杂的功能,其行为也不一定很清晰。...3 ERRO[0000] error waiting for container: context canceled 我们可以看到可执行文件找不到的报错,executable file not found...比如: CMD echo $HOME 在实际执行中,会将其变更为: CMD [ "sh", "-c", "echo $HOME" ] 这就是为什么我们可以使用环境变量的原因,因为这些环境变量会被 shell...那么当 service nginx start 命令结束后,sh 也就结束了,sh 作为主进程退出了,自然就会令容器退出。 正确的做法是直接执行 nginx 可执行文件,并且要求以前台形式运行。

1.8K23
  • linux离线安装docker20.10.7 版本(亲测有效)

    现在把这些指令都复制到 /usr/bin/ 里面,因为 /usr/bin/ 这个在在系统的PATH环境变量中。所以在随便一个目录都可以使用这个文件夹下的指令。...不是所有目录下都可以执行/usr/local/bin和/usr/bin中的可执行文件。执行一个可执行文件的前提是该文件所在的目录在系统的PATH环境变量中。...PATH环境变量是一个包含多个目录路径的列表,系统会按照列表中的顺序搜索这些目录来查找可执行文件。当您在命令行中输入一个命令时,系统会按照PATH环境变量中的顺序在这些目录中查找对应的可执行文件。...通常情况下,/usr/local/bin和/usr/bin都会被包含在PATH环境变量中,因此您可以在终端中从任意目录执行这些目录中的可执行文件。...但是,如果您的PATH环境变量没有包含这些目录,或者被其他目录覆盖了,那么您就无法直接执行这些可执行文件。 您可以通过在终端中运行echo $PATH命令来查看当前的PATH环境变量的值。

    6.3K10

    Docker下MySQL主从三部曲之二:细说镜像制作

    /usr/local/bin #定义entrypoint文件名 ENV ENTRY_FILE_NAME docker-entrypoint.sh #定义entrypoint的软链接文件名 ENV...,需要创建好,否则mysql启动会报错; 新的docker-entrypoint.sh文件,记得增加可执行权限,如果不加的话,在vmware的ubuntu上可以创建容器成功,在真正的电脑上创建容器会失败...,提示找不到可执行文件; entrypoint.sh只是个软链接,真正的脚本是docker-entrypoint.sh,官方镜像是这么设置的,在此脚本中和官方保持一致; 接下来,我们看看用来覆盖官方镜像中的...,所以我们在master文件夹下创建的master.cnf文件会被MySQL识别和加载,此文件中有server id,以及开启bin log的设置,如下: [mysqld] log-bin=mysql-bin...《Docker下手工配置MySQL主从》一文中我们记录下主库的bin log文件名和日志位置,然后设置从库时会用到,但是本章却没有用到这个参数,此参数究竟有什么影响呢?

    72830

    Dockerfile文件万字全面解析

    如果 不存在,那么path中的所有未创建的目录都会自动创建。 如果src内容改变了,在第一次遇到ADD指令后,会禁用后续所有指令的缓存,包括RUN指令的缓存。...如果 不存在,那么path中的所有未创建的目录都会自动创建。 如果src内容改变了,在第一次遇到COPY指令后,会禁用后续所有指令的缓存,包括RUN指令的缓存。...ENTRYPOINT Shell示例 ENTRYPOINT定义一个简单的string,然后它就会在/bin/sh -c中执行。...exec_cmd p1_cmd /bin/sh -c exec_cmd p1_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry /bin/sh...Linux的默认shell是["/bin/sh", "-c"],Windows的默认shell是["cmd", "/S", "/C"]。SHELL指令必须在Dockfile中写成JSON格式。

    2.8K20

    shell脚本专题(04):循环

    二、本文前言 本文是该专题的第四篇。 循环是编程的一部分,shell脚本的编写离不开循环。文章主要介绍了通过两层for循环查找可执行文件和使用while循环创建用户这两个示例。...三、脚本测试 1.查找可执行文件 本文示例展示了如何通过两层循环查找可执行文件。脚本如下: [root@shell ~]# more find_exe.sh #!.../bin/bash #查找用户环境变量中的可执行文件 IFS=: for folder in $PATH do echo "$folder:" for file in $folder/* do if.../find_exe.sh |more /usr/local/sbin: /usr/local/bin: /usr/local/bin/chardetect /usr/local/bin/docker-compose.../bin/bash':脚本首行,声明执行脚本的shell 'IFS=:':自定义分隔符为: 'for folder in PATH':开启外层循环,使用for命令循环读取变量\PATH并赋值给folder

    1.6K11

    DockerFile解析

    WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点 ENV:用来在构建镜像过程中设置环境变量 ENV MY_PATH /usr/mytest 这个环境变量可以在后续的任何RUN指令中使用...案例 Base镜像(scratch) Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的 docker rm -f $(docker ps -q)...要全部显示,请加参数 -i 问题:如果我们希望显示 HTTP 头信息,就需要加上 -i 参数 WHY 我们可以看到可执行文件找不到的报错,executable file not found。...$PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器运行时监听的端口 EXPOSE 8080 #启动时运行tomcat # ENTRYPOINT...["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ] # CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh

    52600

    DockerFile解析

    WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点 ENV:用来在构建镜像过程中设置环境变量 ENV MY_PATH /usr/mytest 这个环境变量可以在后续的任何RUN...案例 Base镜像(scratch) Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的 ?...WHY 我们可以看到可执行文件找不到的报错,executable file not found。 之前我们说过,跟在镜像名后面的是 command,运行时会替换 CMD 的默认值。...$PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器运行时监听的端口 EXPOSE 8080 #启动时运行tomcat # ENTRYPOINT...["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ] # CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh

    69120

    三分钟完成 ubuntu16.04初始化,Java,maven,docker环境的部署

    建议放在用户目录)运行 git clone https://gitee.com/qiu-qian/Fast-Linux.git 克隆该项目 进入与你对应版本的Linux系统中,例如我是Ubuntu16.04...,则输入 cd Fast-Linux/ubuntu/ubuntu16-04/ 根据说明找到你想要部署的环境,然后将其设置为可执行文件,例如我想使用 start.sh 则输入 chmod 700 start.sh...=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin' >>/etc/environment #追加java的用户环境变量 echo 'export JAVA_HOME...=$PATH:$M2_HOME/bin' >>/etc/profile #新建maven仓库 mkdir repository #修改maven的配置文件 # rm apache-maven-3.6.3...# sh get-docker.sh --mirror Aliyun sh get-docker.sh --mirror AzureChinaCloud #配置镜像加速 echo "{\"registry-mirrors

    71010

    Dockerfile

    特别是使用那些官方镜像,因为Docker的工程师知道如何更好的在容器中运行软件。 当然,某些情况下我们也不得不自己构建镜像,比如找不到现成的镜像,比如自己开发的应用程序,需要在镜像中加入特定的功能。...,创建过程大致分为三步,先创建容器,在容器中安装我们所需要的内容,再使用docker commit将容器打包为镜像 格式: docker commit [选项] [[:]] 选项: --author //指定修改的作者 --message //记录本次修改的内容 实例: 在centos的base镜像中安装vim-common并保存为新镜像.../init.sh EXPOSE 8080 CMD ["/bin/bash","/init.sh"] [root@server1 ~]#vim init.sh #!...ADD init.sh /init.sh EXPOSE 80 ENTRYPOINT ["/bin/bash","/init.sh"] [root@zhao /opt/dockerfile/kod]#vim

    92720

    docker的varrundocker.sock参数

    上图红框中的功能:通过docker port命令得到该容器的端口映射信息,再通过sed命令从该信息中取得端口号,然后再用export命令暴露出去。...还剩最后一个问题:上图红框中的docker命令在容器中可以执行么?会不会提示"找不到docker命令"?.../blob/0.10.0/Dockerfile 如下图红框,果然在构建镜像的时候就安装了docker应用,因此在容器中执行docker xxx命令是没问题的: ?...执行以下命令进入kafka容器: docker exec -it kafka /bin/bash 在容器内执行命令docker ps,看到的内容和在宿主机上执行docker ps命令是一样的: bash...一篇来自官方的文档给我们了启发,地址是:https://docs.docker.com/docker-for-azure/upgrade/ ,如下图红框所示,将宿主机的可执行文件docker映射到容器的

    7K42

    EOS开发环境搭建,如何编译安装构建EOSIO

    大多数用户更喜欢使用自动化脚本或docker,而更高级的用户或希望部署公共节点的用户可能需要手动方法。构建内容生成在eos/build文件夹中。...可执行文件可以在eos/build/programs文件夹的子文件夹中找到。 自动化脚本 :适合于大多数开发人员,这个脚本是基于Mac OS和许多Linux版本的。...在 docker 中启动 nodeos docker run --name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh -e arg1.../eos nodeosd.sh -e arg1 arg2 获取区块链信息 curl http://127.0.0.1:8888/v1/chain/get_info 在docker中启动nodeos和keosd...若要在编译器中重写默认选择,请将这些标志添加到CMake命令: -DCMAKE_CXX_COMPILER=/path/to/c++ -DCMAKE_C_COMPILER=/path/to/cc 对于调试模式的安装构建

    1.5K30

    深入了解 Golang 多架构编译:交叉编译最佳实践

    验证编译结果:编译完成后,可以验证生成的可执行文件是否能够在目标平台上正常运行。 3....macOS 64 位可执行文件 GOOS=darwin GOARCH=amd64 go build -o hello-darwin-amd64 main.go 通过以上命令,我们可以在不同的操作系统和架构上编译出相应的可执行文件...,使得我们的应用程序能够在各种环境中运行。.../build.sh 这个脚本会在 build 目录中生成多个目标平台的可执行文件。 3.3 安装和使用交叉编译工具链 对于一些架构,例如 ARM,你可能需要安装特定的交叉编译工具链。...将工具链添加到系统环境变量 echo "export PATH=\$PATH:/usr/local/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin

    1.5K10

    Golang基于Gitlab CICD部署方案

    docker是由于需要在容器里面使用宿主的docker命令,这里就需要安装一个docker的可执行文件,然后在启动容器的时候,将宿主的 /var/run/docker.sock 文件挂载到容器内的同样位置...gitlab-runner在执行的时候,会根据上面的配置启动一个容器,即配置中的go-tools:1.9.2,b其中所有的启动参数都会在[runners.docker]节点下配置好,包括挂载啊,网络啊之类的...容器启动成功之后,会使用这个容器去gitlab上pull代码,然后根据自己定义的规则进行检验,全部检测成功之后便是部署了。 volumes: 是为了在容器中可以执行宿主机的docker命令。...请注意,如果我们要避免将我们的工具应用于外部资源,并将其限制在我们的代码中。.... | grep -v /vendor/ 单元测试 这些是您可以在代码中运行的最常见的测试。每个.go文件需要一个能支持单元测试的_test.go文件。

    2.9K20

    Golang基于Gitlab CICD部署方案

    docker是由于需要在容器里面使用宿主的docker命令,这里就需要安装一个docker的可执行文件,然后在启动容器的时候,将宿主的 /var/run/docker.sock 文件挂载到容器内的同样位置...gitlab-runner在执行的时候,会根据上面的配置启动一个容器,即配置中的go-tools:1.9.2,b其中所有的启动参数都会在[runners.docker]节点下配置好,包括挂载啊,网络啊之类的...容器启动成功之后,会使用这个容器去gitlab上pull代码,然后根据自己定义的规则进行检验,全部检测成功之后便是部署了。 volumes: 是为了在容器中可以执行宿主机的docker命令。...请注意,如果我们要避免将我们的工具应用于外部资源,并将其限制在我们的代码中。.... | grep -v /vendor/ 单元测试 这些是您可以在代码中运行的最常见的测试。每个.go文件需要一个能支持单元测试的_test.go文件。

    1.4K21
    领券