如何在从alpine base image创建docker映像时添加用户

如何在从alpine base image创建docker映像时添加用户,docker,dockerfile,alpine,Docker,Dockerfile,Alpine,我想在bash模式下运行容器时添加用户www数据作为默认用户 目前,当我输入WHOAMI时,它将root显示为用户,但我需要www数据作为用户,如何在docker中实现这一点 这是我的docker文件: FROM php:7.2-fpm-alpine LABEL maintainer="y.ghorecha@abc.de" \ muz.customer="xxx" \ muz.product="WIDC" \ container.mode="prod

我想在bash模式下运行容器时添加用户www数据作为默认用户

目前,当我输入WHOAMI时,它将root显示为用户,但我需要www数据作为用户,如何在docker中实现这一点

这是我的docker文件:

    FROM php:7.2-fpm-alpine

LABEL maintainer="y.ghorecha@abc.de" \
      muz.customer="xxx" \
      muz.product="WIDC" \
      container.mode="production"

#https://pkgs.alpinelinux.org/packages
RUN apk add --no-cache --virtual .deps autoconf tzdata build-base libzip-dev mysql-dev gmp-dev \
            libxml2-dev libpng-dev zlib-dev freetype-dev jpeg-dev icu-dev openldap-dev libxslt-dev &&\
    docker-php-ext-install zip xml mbstring json intl gd pdo pdo_mysql iconv soap \
                           dom gmp fileinfo sockets bcmath mysqli ldap xsl &&\
    echo 'date.timezone="Europe/Berlin"' >> "${PHP_INI_DIR}"/php.ini &&\
    cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime &&\
    echo 'Europe/Berlin' > /etc/timezone &&\
    apk del .deps &&\
    apk add --no-cache libzip mysql libxml2 libpng zlib freetype jpeg icu gmp git subversion libxslt openldap \
            apache2 apache2-ldap apache2-proxy libreoffice openjdk11-jre ghostscript msttcorefonts-installer \
            terminus-font ghostscript-fonts &&\
    ln -s /usr/lib/apache2 /usr/lib/apache2/modules &&\
    ln -s /usr/sbin/httpd /etc/init.d/httpd &&\
    update-ms-fonts

# imap setup
RUN apk --update --virtual build-deps add imap-dev
RUN apk add imap
RUN docker-php-ext-install imap

# copy all codebase
COPY ./ /var/www

# SSH setup
RUN apk update && \
    apk add --no-cache \
    openssh-keygen \
    openssh

# copy Azure specific files
COPY backend/build/azure/backend/ /var/www/backend/

# User owner setup
RUN chown -R www-data:www-data /var/www/

# Work directory setup
WORKDIR /var/www

# copy apache httpd.conf file
COPY httpd.conf /etc/apache2/httpd.conf

# copy crontabs for root user
COPY backend/data/CRONTAB/production/crontab.txt /etc/crontabs/www-data

# SSH Key setup
RUN mkdir -p /home/www-data/.ssh
RUN chown -R www-data:www-data /home/www-data/

#https://github.com/docker-library/httpd/blob/3ebff8dadf1e38dbe694ea0b8f379f6b8bcd993e/2.4/alpine/httpd-foreground
#https://github.com/docker-library/php/blob/master/7.2/alpine3.10/fpm/Dockerfile

CMD ["/bin/sh", "-c", "rm -f /usr/local/apache2/logs/httpd.pid && /usr/sbin/crond start && httpd -DBACKGROUND && php-fpm"]

请提供上述建议。

您可以将此行添加到dockerfile中,以成为www数据用户

这可以添加


如果您想在脚本退出之前成为该用户,请在文件末尾,或者 如果您想以此用户身份在docker文件中执行操作,请在开始时使用。
您可以将此行添加到dockerfile中,以成为www数据用户

这可以添加


如果您想在脚本退出之前成为该用户,请在文件末尾,或者 如果您想以此用户身份在docker文件中执行操作,请在开始时使用。
我首先要检查www数据用户是否存在于图像中。在运行的容器中执行以下操作:

sudo cat /etc/passwd | grep www-data
如果用户确实存在,则在所有执行安装、创建目录、更改权限等操作的命令之后,将该指令添加到Dockerfile。如果基本映像不是以root用户身份运行,则还需要在开始时添加用户0,以切换到这些命令的root用户。查看Dockerfile,我建议在CMD指令之前添加用户www数据

如果www数据用户不存在,则必须首先添加它。Alpine Linux的命令是和。如果www数据的用户id为33,并且它所属的组也被命名为www数据,并且id为33,则如下所示:

RUN addgroup -S -g 33 www-data \
 && adduser -S -D -u 33 -s /sbin/nologin -h /var/www -G www-data www-data
在运行chown-R www-data:www-data/var/www/之前添加上述内容,或将其作为一个运行指令:

RUN addgroup -S -g 33 www-data \
 && adduser -S -D -u 33 -s /sbin/nologin -h /var/www -G www-data www-data \
 && chown -R www-data:www-data /var/www/

我首先要检查www数据用户是否存在于图像中。在运行的容器中执行以下操作:

sudo cat /etc/passwd | grep www-data
如果用户确实存在,则在所有执行安装、创建目录、更改权限等操作的命令之后,将该指令添加到Dockerfile。如果基本映像不是以root用户身份运行,则还需要在开始时添加用户0,以切换到这些命令的root用户。查看Dockerfile,我建议在CMD指令之前添加用户www数据

如果www数据用户不存在,则必须首先添加它。Alpine Linux的命令是和。如果www数据的用户id为33,并且它所属的组也被命名为www数据,并且id为33,则如下所示:

RUN addgroup -S -g 33 www-data \
 && adduser -S -D -u 33 -s /sbin/nologin -h /var/www -G www-data www-data
在运行chown-R www-data:www-data/var/www/之前添加上述内容,或将其作为一个运行指令:

RUN addgroup -S -g 33 www-data \
 && adduser -S -D -u 33 -s /sbin/nologin -h /var/www -G www-data www-data \
 && chown -R www-data:www-data /var/www/

在何处写入www数据??在文件末尾如果您希望在操作结束时成为该用户,或者在您希望执行某项操作之前,请查看我的更新答案我非常高兴我可以帮助您@YogiGhorechawhere写入www数据??在文件末尾如果您希望在操作结束时成为该用户,或者,在你想执行某个动作之前,请检查我的最新答案我真的很高兴我能帮助你@yogighorecha你已经尝试了什么?我建议不要尝试在Docker容器中运行ssh守护进程;围绕它的安全问题是棘手的,无论如何,你不应该经常需要容器中的外壳。你已经试过什么了?我建议不要尝试在Docker容器中运行ssh守护进程;围绕它的安全问题是棘手的,你不应该总是在容器中需要一个外壳。很好地解释了它应该如何工作,而不仅仅是如何快速修复it@gears我使用的是7.2-fpm-alpine,它已经有了www数据用户,检查此错误:步骤13/20:运行addgroup-S-g33 www-data&&adduser-S-D-u33-S/sbin/nologin-h/var/www-gwww-data www-data&&chown-R www-data:www-data/var/www/-->在5b3a56e2ace8 addgroup:group“www-data”中运行,使用命令“/bin/sh-c addgroup-S-g33 www-data&&adduser-S-D-u33-S/sbin/nologin-h/var/www-g”www-data www-data&&chown-R www-data:www-data/var/www/'返回了一个非零代码:1@YogiGhorecha是,addgroup:如果www数据组已存在,则预期会出现组“www数据”正在使用错误。我的答案分为两部分,这取决于www数据用户是否存在。很好地解释了应该如何工作,而不仅仅是如何快速修复it@gears我使用的是7.2-fpm-alpine,它已经有了www数据用户,检查此错误:步骤13/20:运行addgroup-S-g33 www-data&&adduser-S-D-u33-S/sbin/nologin-h/var/www-gwww-data www-data&&chown-R www-data:www-data/var/www/-->在5b3a56e2ace8 addgroup:group“www-data”中运行,使用命令“/bin/sh-c addgroup-S-g33 www-data&&adduser-S-D-u33-S/sbin/nologin-h/var/www-g”www-data www-data&&chown-R www-data:www-data/var/www/'返回了一个非零代码:1@YogiGhorecha是,addgroup:如果 e www数据组已存在。根据www数据用户是否存在,我的答案分为两部分。