我建立了这个图像并把它推到我的ECR回购
FROM ubuntu:latest
RUN useradd -ms /bin/bash toto_user
USER toto_user然后,我将这个用户添加到任务定义toto_user中。即使作为根用户,该任务也没有运行。如果我SSH到那个ec2并运行以下命令,它就工作了:
docker run -v /:/host -it 09999999999.dkr.ecr.us-east-1.amazonaws.com/hello-world:avocado_secret_theft1怎么解决这个,有什么想法吗?
发布于 2020-05-23 17:04:09
为了以非根用户的身份运行任务,首先必须有该用户。首先,使用以下内容在Dockerfile中创建用户和组:
RUN groupadd -r <group name> && useradd --no-log-init -r -g <group name> <user name>" 然后,您可以在Dockerfile中使用“user”作为非根用户运行应用程序。参考Docker文档以获得用户指令,我们可以看到:
。
这样,在运行ECS任务之前,必须与用户一起构建对接者映像并将其上载到ECR。
如果您不使用Dockerfile中的"USER“指令,则可以在创建ECS任务定义时使用用户名指定"user”参数作为另一种方式。若要在任务定义中指定" user“参数,将强制以该用户的身份运行应用程序。此外,用户必须存在于停靠者映像中,否则任务将无法启动。
ECS任务定义中"user“参数的格式如下:
请注意,Windows容器不支持此参数。有关“用户”参数的详细信息,请参阅我们的公共文件3。
例如,下面是我的任务定义的片段:
{
"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的最佳实践
3任务定义参数.容器定义. https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definitions
https://stackoverflow.com/questions/61967965
复制相似问题