首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用非root用户时无法写入绑定到ECS Fragate上的挂载。

问使用非root用户时无法写入绑定到ECS Fragate上的挂载。
EN

Stack Overflow用户
提问于 2022-02-15 20:45:14
回答 1查看 1.2K关注 0票数 2

我正在使用ECS和Fargate,并试图在临时存储上创建绑定挂载,但是我的用户(id 1000)无法写入卷。

根据文档,这应该是可能的。

然而,文件提到:

默认情况下,卷权限设置为0755,所有者设置为root。可以在Dockerfile中自定义这些权限。

所以在我的Dockerfile里

代码语言:javascript
复制
ARG PHP_VERSION=8.1.2-fpm-alpine3.15
FROM php:$PHP_VERSION as php_base

ENV APP_USER=app
ENV APP_USER_HOME=/home/app
ENV APP_USER_UID=1000
ENV APP_USER_GID=1000
ENV APP_HOME=/srv/app

# create the app user
RUN set -eux; \
    addgroup -g $APP_USER_GID -S $APP_USER; \
    adduser -S -D -h "$APP_USER_HOME" -u $APP_USER_UID -s /sbin/nologin -G $APP_USER -g $APP_USER $APP_USER

RUN set -eux; \
    mkdir -p /var/run/php; \
    chown -R ${APP_USER}:${APP_USER} /var/run/php; \
    # TODO THIS IS A TEST
    chmod 777 /var/run/php
# ...

FROM php_base as php_prod

# ...

VOLUME ["/var/run/php"]
USER $APP_USER
WORKDIR "${APP_HOME}"
ENTRYPOINT ["/usr/local/bin/docker-php-entrypoint"]
CMD ["php-fpm"]

在我的任务定义中我有:

代码语言:javascript
复制
{
    "taskDefinitionArn": "arn:aws:ecs:us-east-1:999999999999:task-definition/app:2",
    "containerDefinitions": [
        {
            "name": "app-php",
            "image": "999999999999.dkr.ecr.us-east-1.amazonaws.com/php:latest",
            "cpu": 0,
            "portMappings": [],
            "essential": true,
            "environment": [
                {
                    "name": "DATABASE_PORT",
                    "value": "3306"
                },
                {
                    "name": "DATABASE_USERNAME",
                    "value": "app"
                },
                {
                    "name": "DATABASE_NAME",
                    "value": "app"
                },
                {
                    "name": "DATABASE_HOST",
                    "value": "db.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com"
                }
            ],
            "mountPoints": [
                {
                    "sourceVolume": "php_socket",
                    "containerPath": "/var/run/php",
                    "readOnly": false
                }
            ],
            "volumesFrom": [],
            "secrets": [
                {
                    "name": "DATABASE_PASSWORD",
                    "valueFrom": "arn:aws:ssm:us-east-1:999999999999:parameter/db-password"
                }
            ],
            "readonlyRootFilesystem": false,
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "app",
                    "awslogs-region": "us-east-1",
                    "awslogs-stream-prefix": "app"
                }
            },
            "healthCheck": {
                "command": [
                    "docker-healthcheck"
                ],
                "interval": 10,
                "timeout": 3,
                "retries": 3,
                "startPeriod": 15
            }
        },
        {
            "name": "app-proxy",
            "image": "999999999999.dkr.ecr.us-east-1.amazonaws.com/proxy:latest",
            "cpu": 0,
            "portMappings": [
                {
                    "containerPort": 80,
                    "hostPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "environment": [],
            "mountPoints": [
                {
                    "sourceVolume": "php_socket",
                    "containerPath": "/var/run/php",
                    "readOnly": false
                }
            ],
            "volumesFrom": [],
            "dependsOn": [
                {
                    "containerName": "app-php",
                    "condition": "HEALTHY"
                }
            ],
            "readonlyRootFilesystem": false,
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "app",
                    "awslogs-region": "us-east-1",
                    "awslogs-stream-prefix": "app"
                }
            },
            "healthCheck": {
                "command": [
                    "curl",
                    "-s",
                    "localhost/status-nginx"
                ],
                "interval": 10,
                "timeout": 3,
                "retries": 3,
                "startPeriod": 15
            }
        }
    ],
    "family": "bnc-stage-remises-app",
    "taskRoleArn": "arn:aws:iam::999999999999:role/app-task",
    "executionRoleArn": "arn:aws:iam::999999999999:role/app-exec",
    "networkMode": "awsvpc",
    "revision": 2,
    "volumes": [
        {
            "name": "php_socket",
            "host": {}
        }
    ],
    "status": "ACTIVE",
    "requiresAttributes": [
        {
            "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
        },
        {
            "name": "ecs.capability.execution-role-awslogs"
        },
        {
            "name": "com.amazonaws.ecs.capability.ecr-auth"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
        },
        {
            "name": "com.amazonaws.ecs.capability.task-iam-role"
        },
        {
            "name": "ecs.capability.container-health-check"
        },
        {
            "name": "ecs.capability.container-ordering"
        },
        {
            "name": "ecs.capability.execution-role-ecr-pull"
        },
        {
            "name": "ecs.capability.secrets.ssm.environment-variables"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
        },
        {
            "name": "ecs.capability.task-eni"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
        }
    ],
    "placementConstraints": [],
    "compatibilities": [
        "EC2",
        "FARGATE"
    ],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "256",
    "memory": "2048",
    "registeredAt": "2022-02-15T15:54:47.452Z",
    "registeredBy": "arn:aws:sts::999999999999:assumed-role/OrganizationAccountAccessRole/9999999999999999999",
    "tags": [
        {
            "key": "Project",
            "value": "project-name"
        },
        {
            "key": "Environment",
            "value": "stage"
        },
        {
            "key": "ManagedBy",
            "value": "Terraform"
        },
        {
            "key": "Client",
            "value": "ClientName"
        },
        {
            "key": "Namespace",
            "value": "client-name"
        },
        {
            "key": "Name",
            "value": "app"
        }
    ]
}

然而,在ECS中,我一直得到

代码语言:javascript
复制
2022-02-15T20:36:14.679Z    [15-Feb-2022 20:36:14] ERROR: unable to bind listening socket for address '/var/run/php/php-fpm.sock': Permission denied (13)   app-php
2022-02-15T20:36:14.679Z    [15-Feb-2022 20:36:14] ERROR: unable to bind listening socket for address '/var/run/php/php-fpm.sock': Permission denied (13)   app-php
2022-02-15T20:36:14.679Z    [15-Feb-2022 20:36:14] ERROR: FPM initialization failed app-php
2022-02-15T20:36:14.679Z    [15-Feb-2022 20:36:14] ERROR: FPM initialization failed app-php
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-17 14:15:47

事实证明,/var/run是我容器中/run的一个符号链接,而且ECS无法处理这个问题。我改变了我的设置,使用/run/php而不是/var/run/php,一切都很完美。

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

https://stackoverflow.com/questions/71133168

复制
相关文章

相似问题

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