【问题标题】:Running docker container with user使用用户运行 docker 容器
【发布时间】:2017-12-28 23:38:23
【问题描述】:

我创建了这个 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

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

【问题讨论】:

  • 你能运行docker logs看看会发生什么吗?
  • Ubuntu 没有命令yum,它使用apt 进行包管理。您是如何构建该图像的?

标签: docker dockerfile


【解决方案1】:

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


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

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

USER newuser

在 Dockerfile 中。以下所有命令将以用户newuser 执行。这适用于所有以下RUN 指令以及docker run 命令。


第二种可能性:选项--user(可能是图片中的USER指令)

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

docker run --user 1000

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

docker run --user 1000:100

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

docker run --user newuser

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


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

【讨论】:

  • 我只是在浏览文档,发现--security-opt label=user:newuser可能我不太了解。但docker run --user newuser -i -t image:version /bin/bash 为我工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2016-12-10
相关资源
最近更新 更多