繁体   English   中英

从 alpine 基础镜像创建 docker 镜像时如何添加用户

[英]How to Add user when creating docker image from alpine base image

当我在 bash 模式下运行我的容器时,我想将用户www-data添加为我的默认用户。

目前,当我输入 WHOAMI 时,它显示root作为用户,但我需要www-data作为用户,如何在 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"]

以上请指教。

我首先要检查www-data用户是否甚至在图像中退出。 在正在运行的容器中执行如下:

sudo cat /etc/passwd | grep www-data

如果用户确实存在,则在安装、创建目录、更改权限等所有命令之后将USER www-data指令添加到 Dockerfile。还需要在开始时添加USER 0以切换到 root 用户如果基本映像不以 root 身份运行,则使用这些命令。 查看 Dockerfile 我建议在CMD指令之前添加USER www-data

如果www-data用户不存在,则必须先添加它。 Alpine Linux 的命令是addgroupadduser 如果www-data的用户 id 为 33 并且它所属的组也命名为www-data并且 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

RUN chown -R www-data:www-data /var/www/之前添加上述内容,或使其成为单个RUN指令:

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/

您可以将此行添加到您的 dockerfile 以成为www-data用户

USER www-data

这可以添加

  • 在文件的结尾(如果你想成为脚本退出之前的用户),或
  • 一开始,如果您想以该用户身份在 docker 文件中执行您的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM