无法在 Docker 中使用 sudo 命令,显示“bash: sudo: command not found”

Posted

技术标签:

【中文标题】无法在 Docker 中使用 sudo 命令,显示“bash: sudo: command not found”【英文标题】:Unable to use sudo commands within Docker, "bash: sudo: command not found" is displayed 【发布时间】:2017-02-20 11:32:36 【问题描述】:

我已经使用以下命令安装了 TensorFlow

docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel

我需要在 Windows 机器上设置 TensorFlow Serving。我关注the instructions 并在安装TensorFlow Serving 依赖项时运行下面提到的sudo 命令:

sudo apt-get update && sudo apt-get install -y \
     build-essential \
     curl \
     git \
     libfreetype6-dev \
     libpng12-dev \
     libzmq3-dev \
     pkg-config \
     python-dev \
     python-numpy \
     python-pip \
     software-properties-common \
     swig \
     zip \
     zlib1g-dev

显示如下错误:

bash: sudo: command not found

【问题讨论】:

投票关闭超级用户的人是怎么回事?关于编写 Dockerfile 的问题肯定是与开发相关的;这个应该被关闭,因为没有足够的信息来重现(不包含完整的 Dockerfile、运行命令,甚至除了图像链接后面的错误),不属于 SU。 【参考方案1】:

Docker 镜像通常没有sudo,默认情况下您已经以root 运行。试试

apt-get update && apt-get install -y build-essential curl git libfreetype6-dev libpng12-dev libzmq3-dev pkg-config python-dev python-numpy python-pip software-properties-common swig zip zlib1g-d

如果您不想以 root 身份运行,请参阅Docker documentation on the User command。

【讨论】:

反斜杠实际上是有害的,如果像这里一样,你将所有内容放在一行上(因为在这种情况下,它们正在转义空格,从而使参数 build-essential 而不是 @ 987654327@);它们仅在多行命令中是正确的,因为 OP 试图输入但未能进行代码格式化。 @sam:在运行命令“apt-get update && apt-get install -y \ build-essential \ curl \ git \ libfreetype6-dev \ libpng12-dev \ libzmq3-dev \ pkg- config\python-dev\python-numpy\python-pip\software-properties-common\swig\zip\zlib1g-d”,报错“bash: apt-get: command not found”。 @Vasanti,好吧,这从表面上看很简单,不是吗?您要扩展的基本映像是什么? @CharlesDuffy:我运行以下命令来构建我的容器“docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel” 嗯。如果它基于github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/… 的 Dockerfile,那么它 基于 Ubuntu,因此应该 具有 apt-get。有趣的是要弄清楚内部 PATH 是否错误,或者它是否与该 Dockerfile 不匹配。不过,这很容易做到——只需在容器中使用 echo $PATHls -l /usr/sbin【参考方案2】:

docker 自带 root,它不需要 sudo

顺便说一句,如果你想在 docker 中使用 sudo,如果你想 install sudo

试试这个,

apt-get update && \
      apt-get -y install sudo

现在您可以在 docker 中将 sudo 与您的命令一起使用...

【讨论】:

没有理由通过在容器中安装sudo来削弱容器的安全性,即使可以。 如果未安装 apt-get,请使用:apk add --update sudo @PeterV.Mørch 对sudo --user postgres psql -d template1 这样的命令有用吗?

以上是关于无法在 Docker 中使用 sudo 命令,显示“bash: sudo: command not found”的主要内容,如果未能解决你的问题,请参考以下文章

win7下建立docker共享文件夹

免sudo使用docker命令

如何在 docker 容器中使用 sudo?

docker命令不需要敲sudo的方法

Ubuntu 下 docker 命令免输 sudo

CentOS 7 Docker