文件不存在错误:[Errno 2] 没有这个文件或目录:'sudo':'sudo'

4

我一直在尝试创建一个Docker镜像来运行fbprophet和streamlit。当我运行docker run命令时,会出现以下错误。

我已经困扰了好几天了,希望能得到帮助。

谢谢。

$ docker run <image-id> streamlit hello
Generate machine-id
Traceback (most recent call last):
  File "/usr/local/bin/streamlit", line 5, in <module>
    from streamlit.cli import main
  File "/usr/local/lib/python3.7/site-packages/streamlit/__init__.py", line 74, in <module>
    subprocess.run(["sudo", "dbus-uuidgen", "--ensure"])
  File "/usr/local/lib/python3.7/subprocess.py", line 488, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/local/lib/python3.7/subprocess.py", line 800, in __init__
    restore_signals, start_new_session)
  File "/usr/local/lib/python3.7/subprocess.py", line 1551, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'sudo': 'sudo'

以下是Dockerfile的内容:
FROM python:3.7-alpine

WORKDIR /workspace

COPY requirements.txt .

RUN apk add --no-cache python3 python3-dev build-base libffi-dev openssl-dev curl krb5-dev linux-headers zeromq-dev jpeg-dev zlib-dev && \
    python3 -m ensurepip && \
    rm -r /usr/lib/python*/ensurepip && \
    pip3 install --upgrade pip setuptools && \
    if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
    if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \
    rm -r /root/.cache


RUN apk --update add --no-cache gcc freetype-dev libpng-dev

RUN apk add --no-cache --virtual .build-deps \
    musl-dev \
    g++


RUN pip install -r requirements.txt --no-cache-dir 

# removing dependencies
RUN apk del .build-deps


EXPOSE 9999

subprocess.run(["sudo", "dbus-uuidgen", "--ensure"]) 可能需要 shell=True 才能正常工作,并且是特定于操作系统的。这似乎是 streamlit 的问题,您应该与开发人员联系。我们不是他们项目的技术支持。 - Karl Knechtel
谢谢@KarlKnechtel,我会向Streamlit团队提出这个问题。 - zafar alam
@zafaralam 我们刚刚发布了一个 Docker 教程,其中包括一个示例 Dockerfile: https://docs.streamlit.io/knowledge-base/tutorials/deploy/docker - Caroline Frasca
1个回答

0
从错误信息和你的 Dockerfile 来看,似乎 Streamlit 在运行时假定可使用 sudo。尝试在你的 apk add 语句中加入sudo。

sudo 添加到 Dockerfile 中是一种不好的做法。升级 Streamlit 以使用不需要 sudo 的版本。 - BeGreen
是的,但在写下该评论时,那并不是一个选择。自那时以来,Streamlit已经取消了作为安装的一部分使用sudo的要求。 - Randy Zwitch
当然,这是为了其他遇到这个问题的开发人员。因为我公司的开发人员要求我根据你的评论添加 sudo - BeGreen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接