You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker中运行sudo命令 解决镜像构建时sudo需输入密码的问题

问题根源
  • Docker 构建为非交互流程,无法响应 sudo 的密码输入请求
  • 你在 Dockerfile 中提前切换到了普通用户 docker,后续执行 sudo apt install 时需要密码验证,直接触发报错
  • 额外冗余问题:Dockerfile 仅最后一条 CMD 指令会生效,你编写的多个 CMD /bin/bash 无实际作用,会被后续指令覆盖
解决方案

提供两种可行方案,优先选择第一种:

方案1(最优,推荐):系统依赖安装全部在 root 用户下完成,无需使用 sudo

Docker 构建默认以 root 用户运行,安装系统软件天然具备权限,完全不需要引入 sudo、切换普通用户后再用 sudo 安装的冗余逻辑,还可以减小镜像体积。

方案2(必须保留普通用户下执行安装逻辑时使用):配置无密码 sudo

创建 docker 用户后追加 sudoers 配置,允许该用户执行 sudo 无需输入密码:

RUN echo "docker ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
修正后可正常构建的 Dockerfile
FROM ubuntu:latest
# root 用户下直接安装所有系统依赖,无需sudo,清理缓存减小镜像体积
RUN apt-get -y update && apt-get -y install sqlite3 python3 python3-pip && rm -rf /var/lib/apt/lists/*
# 创建普通用户
RUN useradd -m docker
# 切换到普通用户运行后续步骤,避免容器以root权限运行的安全风险
USER docker
# 普通用户仅对自身家目录有写权限,因此数据库文件建在家目录下
RUN mkdir /home/docker/db
RUN /usr/bin/sqlite3 /home/docker/db/test.db

WORKDIR /usr/src/app
ENV FLASK_APP=__init__.py
ENV FLASK_DEBUG=1
ENV FLASK_RUN_HOST=0.0.0.0
ENV FLASK_ENV=development 

COPY requirements.txt requirements.txt
# 普通用户安装pip依赖添加--user参数避免权限报错
RUN pip3 install --user -r requirements.txt
COPY . .

CMD ["flask", "run"]

内容的提问来源于stack exchange,提问作者Nav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:51:02