如何将用户添加到Docker容器?

我有一个docker容器,里面运行着一些进程(uwsgi和芹菜)。我想为这些进程创建一个芹菜用户和一个uwsgi用户,以及它们都将属于的工作组,以便分配权限

我尝试将RUN adduser uwsgiRUN adduser芹菜添加到我的Dockerfile,但这会导致问题,因为这些命令会提示输入(我已经在下面发布了构建的响应)

向Docker容器中添加用户以便为容器中运行的工作人员设置权限的最佳方法是什么

我的码头工人形象是从官方的Ubuntu14.04基地建立起来的

以下是运行adduser命令时Dockerfile的输出:

正在添加用户“uwsgi”。。。
正在添加新组“uwsgi”(1000)。。。
正在添加组为“uwsgi”的新用户“uwsgi”(1000)。。。
正在创建主目录“/home/uwsgi”。。。
正在从“/etc/skel”复制文件。。。
[91M输入新的UNIX密码:重新输入新的UNIX密码:[0m
[91mpasswd:身份验证令牌操作错误
密码:密码未更改
[0m
[91mUse未初始化值$answer在/usr/sbin/adduser行563处盖章。
[0m
[91mUse未初始化值$answer在/usr/sbin/adduser第564行的模式匹配(m/)中。
[0m
是否重试?[y/N]
更改uwsgi的用户信息
输入新值,或按Enter键作为默认值
全名[]:
房间号[]:工作电话[]:家庭电话[]:其他[]:
[91mUse未初始化值$answer在/usr/sbin/adduser行589处盖章。
[0m
[91mUse未初始化值$answer在/usr/sbin/adduser行590的模式匹配(m/)中。
[0m
信息正确吗?[Y/n]
---&燃气轮机;258f2f13df
拆卸中间容器59948863162a
步骤5:运行adduser芹菜
--->在be06f1e20f64中运行
正在添加用户“芹菜”。。。
正在添加新组“芹菜”(1001)。。。
正在添加组为“芹菜”的新用户“芹菜”(1001)。。。
正在创建主目录“/home/芹菜”。。。
正在从“/etc/skel”复制文件。。。
[91M输入新的UNIX密码:重新输入新的UNIX密码:[0m
[91mpasswd:身份验证令牌操作错误
密码:密码未更改
[0m
[91mUse未初始化值$answer在/usr/sbin/adduser行563处盖章。
[0m
[91mUse未初始化值$answer在/usr/sbin/adduser第564行的模式匹配(m/)中。
[0m
是否重试?[y/N]
更改芹菜的用户信息
输入新值,或按Enter键作为默认值
全名[]:房间号[]:工作电话[]:
家庭电话[]:其他[]:
[91mUse未初始化值$answer在/usr/sbin/adduser行589处盖章。
[0m
[91mUse未初始化值$answer在/usr/sbin/adduser行590的模式匹配(m/)中。
[0m
信息正确吗?[Y/n]

诀窍是使用useradd而不是其交互式包装器adduser
我通常通过以下方式创建用户:

运行useradd-ms/bin/bash newuser

它为用户创建一个主目录,并确保bash是默认shell

然后,您可以添加:

用户新建用户
WORKDIR/home/newuser

到您的dockerfile。之后的每个命令以及交互会话都将作为usernewuser执行:

docker run-t-i图像
[email protected]:~$

在调用用户命令之前,您可能必须授予newuser执行要运行的程序的权限

出于安全考虑,在容器中使用非特权用户是一个好主意。它也有一些缺点。最重要的是,从您的映像派生映像的用户必须先切换回root,然后才能使用超级用户权限执行命令

发表评论