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

Docker exec默认root用户,需切换普通用户且ENTRYPOINT保留root权限

解决Docker Exec默认普通用户+Entrypoint Root执行的问题

核心需求拆解

  • Entrypoint脚本必须以root权限完成sshd配置修改、重启操作
  • docker exec默认以普通用户(如example)进入容器,无需每次加-u参数

方案1:使用命令别名实现默认普通用户Exec

这个方案不需要修改用户权限,完全符合你无法调整用户权限的限制:

步骤1:编写Dockerfile

FROM ubuntu:latest

# 安装sshd依赖
RUN apt-get update && apt-get install -y openssh-server && rm -rf /var/lib/apt/lists/*

# 创建普通用户example
RUN useradd -m -s /bin/bash example

# 复制并设置entrypoint脚本权限
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# 容器默认以root启动,执行entrypoint脚本
ENTRYPOINT ["/entrypoint.sh"]

步骤2:编写entrypoint.sh脚本

#!/bin/bash

# 以root完成sshd配置修改
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
echo "AllowUsers example" >> /etc/ssh/sshd_config

# 重启sshd服务
service ssh restart

# 切换到普通用户,启动长期运行的主进程(避免容器退出)
exec su - example -c "exec bash"

步骤3:设置docker exec别名

在你的shell配置文件(~/.bashrc、~/.zshrc等)中添加以下别名:

alias docker-exec='docker exec -u example'

执行source ~/.bashrc(对应你的配置文件)使别名生效。之后使用docker-exec <容器ID/名称> bash就能默认以example用户进入容器。

方案2:给普通用户添加sudo权限(若允许调整用户权限)

如果可以给普通用户添加sudo权限,能实现更原生的docker exec默认普通用户:

步骤1:修改Dockerfile

FROM ubuntu:latest

RUN apt-get update && apt-get install -y openssh-server sudo && rm -rf /var/lib/apt/lists/*

# 创建普通用户并添加免密sudo权限
RUN useradd -m -s /bin/bash example && echo "example ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# 设置默认用户为example,docker exec默认使用该用户
USER example

ENTRYPOINT ["/entrypoint.sh"]

步骤2:编写entrypoint.sh脚本

#!/bin/bash

# 通过sudo以root完成sshd配置操作
sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
sudo echo "AllowUsers example" >> /etc/ssh/sshd_config
sudo service ssh restart

# 启动普通用户的主进程
exec bash

构建镜像并启动容器后,直接执行docker exec <容器ID/名称> bash就会默认以example用户进入,entrypoint脚本通过sudo完成root级操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:33:15