首页
学习
活动
专区
工具
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)

21K43

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.5K23

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环境变量值。

2.3K10

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

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

64430

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.7K20

Dockerfile

特别是使用那些官方镜像,因为Docker工程师知道如何更好容器运行软件。 当然,某些情况下我们也不得不自己构建镜像,比如找不到现成镜像,比如自己开发应用程序,需要在镜像中加入特定功能。...,创建过程大致分为三步,先创建容器,容器安装我们所需要内容,再使用docker commit将容器打包为镜像 格式: docker commit [选项] [[:]] 选项: --author //指定修改作者 --message //记录本次修改内容 实例: centosbase镜像安装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

84820

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

51100

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

67320

三分钟完成 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

67310

dockervarrundocker.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映射到容器

6.1K42

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.4K30

深入了解 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

31410

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.8K20

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

C++ docker_docker部署mysql

/c++程序运行在docker容器,就必须先创建一个docker镜像,通过镜像创建容器,来使我们程序容器运行起来。...,startup.sh是启动client程序脚本,startup.sh启动之前我们首先会设置环境变量LD_LIBRARY_PATH: 下面我们还是通过Dockerfile 来创建一个镜像,.../client,但是我们事实却并不是这样,我们查看日志,发现退出原因是找不到动态库: 其实在docker中一个容器运行时间长短,其实就是CMD后面跟命令执行时间,startup.sh就是一个脚本...startup.sh内容如下: #!/bin/bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib ..../client”,所有可以大致推断出,CMD一定是将startup命令,分成多个CMD来执行,但是Dockerfile**语法是,CMD只执行最后一个,这样就能解释为什么找不到动态库原因了。

66040
领券