gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:19:00 29 4
gpt4 key购买 nike

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

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

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

我的 Docker 镜像是从官方的 Ubuntu14.04 基础构建的。

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

Adding user `uwsgi' ...
Adding new group `uwsgi' (1000) ...
Adding new user `uwsgi' (1000) with group `uwsgi' ...
Creating home directory `/home/uwsgi' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for uwsgi
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []: Work Phone []: Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
---> 258f2f2f13df
Removing intermediate container 59948863162a
Step 5 : RUN adduser celery
---> Running in be06f1e20f64
Adding user `celery' ...
Adding new group `celery' (1001) ...
Adding new user `celery' (1001) with group `celery' ...
Creating home directory `/home/celery' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for celery
Enter the new value, or press ENTER for the default
Full Name []: Room Number []: Work Phone []:
Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]

最佳答案

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

RUN useradd -ms /bin/bash newuser

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

然后你可以添加:

USER newuser
WORKDIR /home/newuser

到你的 dockerfile。之后的每个命令以及交互式 session 都将以用户 newuser 的身份执行:

docker run -t -i image
newuser@131b7ad86360:~$

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

出于安全原因,在容器内使用非特权用户是一个好主意。它也有一些缺点。最重要的是,从您的图像派生图像的人必须切换回 root 才能以 super 用户权限执行命令。

关于linux - 如何将用户添加到 Docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27701930/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com