无效命令“ / bin / sh ”:找不到文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无效命令“ / bin / sh ”:找不到文件相关的知识,希望对你有一定的参考价值。

我有一个Dockerfile与

CMD exec gunicorn --bind 8080 --workers 1 --threads 8 --timeout 0 app:app

失败,并显示错误:Invalid command \"/bin/sh\": file not found

但是同一条命令是这样运行的:

RUN gunicorn --bind 8080 --workers 1 --threads 8 --timeout 0 app:app

可能出什么事了?

Dockerfile:

# Dockerfile
FROM penguicky/docker-python3-opencv

ENV APP_HOME /app
WORKDIR $APP_HOME

RUN apt-get update
RUN apt-get install -y libsm6 libxext6 libxrender-dev
RUN pip3 install Flask gunicorn
RUN pip3 install opencv-contrib-python

EXPOSE 8080

#RUN echo $CV_VERSION

COPY . ./

CMD exec gunicorn --bind 8080 --workers 1 --threads 8 --timeout 0 app:app

更新

我尝试使用这种方式:

CMD ["gunicorn", "--bind", "8080", "--workers", "1" ,"--threads", "8", "--timeout", "0" ,"app:app"]

现在我明白了:

2020-06-02 22:03:27.511 EEST[2020-06-02 19:03:27 +0000] [1] [INFO] Starting gunicorn 20.0.4
2020-06-02 22:03:27.513 EEST[2020-06-02 19:03:27 +0000] [1] [ERROR] Invalid address: ('8080', 8000)

Update2:

所以它可以这样工作:

CMD ["gunicorn", "--bind", "0.0.0.0:8080", "--workers", "1" ,"--threads", "8", "--timeout", "0" ,"app:app"]

但是我不知道为什么它会这样工作。

答案

如果检查--bindgunicorn标志,则表示为指定要绑定的服务器套接字。服务器套接字可以是$HOST$HOST:$PORTfd://$FDunix:$PATH中的任何一个。 IP是有效的$HOST

并且根据上述标记,您在指定该标记时需要提及整个IP。

这是NOT,因为仅提到了8080端口。

CMD ["gunicorn", "--bind", "8080", "--workers", "1" ,"--threads", "8", "--timeout", "0" ,"app:app"]

1以下有效,因为提到了整个IP

CMD ["gunicorn", "--bind", "0.0.0.0:8080", "--workers", "1" ,"--threads", "8", "--timeout", "0" ,"app:app"]

Ref:-https://docs.gunicorn.org/en/stable/run.html

以上是关于无效命令“ / bin / sh ”:找不到文件的主要内容,如果未能解决你的问题,请参考以下文章

获取错误:/ bin / sh scriptcs:找不到命令

Docker / bin / sh:1 ::找不到miniconda3

linux ubuntu /bin/sh 上的脚本错误:curl:找不到? [关闭]

jenkins执行shell命令提示找不到命令解决办法

找不到 Typescript 编译器:命令“tsc”无效

telnet无效指令,telnet找不到命令