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
相关产品推荐
相关产品推荐

