docker exec 不同用户登入

本文介绍如何使用dockerexec命令以root用户身份进入已运行的Docker容器内进行交互式操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker exec 以 root 身份登录容器:

# docker exec -it --user root <容器ID> /bin/bash




### 实现Docker容器中的用户添加并确保数据持久化的方案 要在 Docker 容器中使用 `useradd` 命令并确保数据持久化,可以采用以下方法: #### 方法一:利用数据卷(Data Volume) 通过挂载宿主机目录到容器内部的方式,可以让用户的配置文件存储在宿主机上,从而实现数据的持久化。 1. **创建一个用于存储用户数据的目录** 在宿主机上创建一个专门用来存储 `/etc/passwd` 和其他相关文件的目录。例如: ```bash mkdir -p /host/userdata/etc ``` 2. **启动容器时挂载宿主机目录** 使用 `-v` 参数将宿主机上的目录挂载到容器内的对应路径。以下是具体命令: ```bash docker run -itd \ --name my_container \ -v /host/userdata/etc:/etc \ ubuntu:latest /bin/bash ``` 这样会把宿主机的 `/host/userdata/etc` 目录挂载到容器的 `/etc` 路径下[^1]。 3. **在容器内执行 `useradd` 命令** 容器后,可以通过 `exec` 或者直接进容器来操作: ```bash docker exec -it my_container bash useradd testuser echo "testpassword" | passwd --stdin testuser exit ``` 4. **验证数据持久化效果** 删除容器后再重新拉起一个新的容器实例,仍然可以看到之前创建的用户信息被保留下来,因为这些数据已经写到了宿主机的数据卷中。 #### 方法二:使用数据卷容器(Data Volume Container) 如果不想手动指定具体的宿主机路径,则可以选择定义专用的数据卷容器作为中介层来进行管理。 1. **先建立单独的数据卷容器** 此类容器仅负责提供共享空间而不运行任何实际进程。 ```bash docker create -v /etc --name etc_volume alpine:edge true ``` 2. **正常构建工作负载型应用容器的同时引上述数据源支持** 当前要部署的应用程序容器需声明依赖于先前准备好的数据载体资源。 ```bash docker run -itd \ --name app_with_etc \ --volumes-from=etc_volume \ ubuntu:latest /bin/bash ``` 3. **后续维护同理参照前面描述** #### 示例代码展示 下面给出一段完整的脚本示例,演示如何自动化完成整个流程: ```bash #!/bin/sh HOST_DATA_DIR="/host/userdata" CONTAINER_NAME="my_custom_user_container" mkdir -p ${HOST_DATA_DIR}/etc docker rm -f "${CONTAINER_NAME}" || : docker run -dit \ --name="${CONTAINER_NAME}" \ -v "${HOST_DATA_DIR}"/etc:/etc \ ubuntu:latest sleep infinity docker exec -u root "${CONTAINER_NAME}" sh -c 'useradd demo && echo "demo:demopass" | chpasswd' ``` 以上脚本实现了自动删除旧容器、新建带持久化功能的新容器以及向其中加测试账户的功能。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值