首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在ECS中运行nonRoot用户

如何在ECS中运行nonRoot用户
EN

Stack Overflow用户
提问于 2020-05-23 05:42:07
回答 1查看 3.4K关注 0票数 3

我建立了这个图像并把它推到我的ECR回购

代码语言:javascript
运行
复制
FROM ubuntu:latest

RUN useradd -ms /bin/bash toto_user

USER toto_user

然后,我将这个用户添加到任务定义toto_user中。即使作为根用户,该任务也没有运行。如果我SSH到那个ec2并运行以下命令,它就工作了:

代码语言:javascript
运行
复制
docker run -v /:/host -it 09999999999.dkr.ecr.us-east-1.amazonaws.com/hello-world:avocado_secret_theft1

怎么解决这个,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-23 17:04:09

为了以非根用户的身份运行任务,首先必须有该用户。首先,使用以下内容在Dockerfile中创建用户和组:

代码语言:javascript
运行
复制
RUN groupadd -r <group name> && useradd --no-log-init -r -g <group name> <user name>" 

然后,您可以在Dockerfile中使用“user”作为非根用户运行应用程序。参考Docker文档以获得用户指令,我们可以看到:

  • 用户指令设置用户名(或UID),并可选择在运行映像时使用的用户组(或GID),以及在Dockerfile中跟随它的任何运行、CMD和ENTRYPOINT指令。您可以使用“user”语句标记在运行时应该以“”用户的身份运行停靠容器。有关更多信息,请参考1.

这样,在运行ECS任务之前,必须与用户一起构建对接者映像并将其上载到ECR。

如果您不使用Dockerfile中的"USER“指令,则可以在创建ECS任务定义时使用用户名指定"user”参数作为另一种方式。若要在任务定义中指定" user“参数,将强制以该用户的身份运行应用程序。此外,用户必须存在于停靠者映像中,否则任务将无法启动。

ECS任务定义中"user“参数的格式如下:

  • user
  • user:group
  • uid
  • uid:gid
  • user:gid
  • uid:group

请注意,Windows容器不支持此参数。有关“用户”参数的详细信息,请参阅我们的公共文件3。

例如,下面是我的任务定义的片段:

代码语言:javascript
运行
复制
{
  "containerDefinitions": [
    {
        .
        .
      "user": “<user name>”, ### The task will be run as <user name>. 
      "privileged": null,
        .
        .
    }
  ],
    .
}

最后,请注意,以非根用户的身份运行会带来自身的挑战,例如,如果启动进程侦听80,这是非根用户无法做到的事情。

参考:

1用户-编写Dockerfiles https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user的最佳实践

2

3任务定义参数.容器定义. https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definitions

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61967965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档