使用用户运行 docker 容器

Vij*_*ade 2 docker dockerfile

我创建了这个 docker 文件来在 docker 容器中运行 python 脚本。我在这里创建一个用户,我希望该用户从 docker 镜像运行容器。

FROM ubuntu:16.04
MAINTAINER "Vijendra Kulhade" <xxxxxx@xxxxxx.com>
RUN yum makecache fast
RUN yum -y update
RUN yum -y install gcc
RUN yum -y install zlib-devel
RUN yum -y install openssl-devel
RUN yum -y install python-setuptools python-setuptools-devel
RUN yum -y install libyaml
RUN useradd newuser -d /home/newuser
RUN chown -R newuser.newuser /usr/bin/
RUN chown -R newuser.newuser /usr/lib64/
RUN chown -R newuser.newuser /usr/lib/
ENV https_proxy=http://proxy.xxxx.com:8080
RUN easy_install pip
RUN pip -V
RUN pip install --upgrade pip
RUN pip install --upgrade --force-reinstall setuptools
Run Code Online (Sandbox Code Playgroud)

我使用此命令来创建图像 docker build -t python-container . ,并且我正在使用该命令 docker run --security-opt label=user:newuser -i -t python-container:latest /bin/bash从图像运行容器。我期望这会启动容器并使用newuser@xxxxxxxx. 但这并没有发生。请告诉我如何实现这一目标。

mvi*_*eck 12

使用不同于 root 的用户运行 docker 容器有两种可能性。


第一种可能性:在 Dockerfile 中创建用户

在示例 Dockerfile 中,您newuser使用 command创建用户useradd。可以写指令

USER newuser
Run Code Online (Sandbox Code Playgroud)

在 Dockerfile 中。以下所有命令都将以用户身份执行newuser。这适用于所有以下RUN说明以及docker run命令。


第二种可能性:选项--userUSER图像中最上面可能的说明)

您可以使用docker run选项--user. 它可用于指定不带名称的 UID:

docker run --user 1000
Run Code Online (Sandbox Code Playgroud)

或者指定不带名称的 UID 和 GID:

docker run --user 1000:100
Run Code Online (Sandbox Code Playgroud)

或者仅指定名称而不知道用户将获得哪个 UID:

docker run --user newuser
Run Code Online (Sandbox Code Playgroud)

您可以结合使用这两种方式。在 Dockerfile 中使用指定的(!)UID 和 GID 创建一个用户,并将其添加到所有所需的组中。使用匹配docker run --user UID:GID,你的容器用户将拥有你在 Dockerfile 中给他的所有属性。


(我不明白你的方法--security-opt label=user:newuser,要么是错误的,要么是我一无所知。)