从 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"]
以上请指教
您可以将此行添加到您的 docker 文件中,以成为 www-data
用户
USER www-data
这可以添加
- 在文件的末尾(如果您想在脚本退出前成为该用户),或
- 在 开头 如果您想以该用户身份在 docker 文件中执行操作。
我首先要检查 www-data
用户是否退出了图像。在 运行ning 容器中执行类似:
sudo cat /etc/passwd | grep www-data
如果用户 确实存在 然后在所有安装、创建目录、更改权限等命令之后将 USER www-data
指令添加到 Dockerfile。这将是如果基本映像不是 运行 作为 root,还需要在开头添加 USER 0
以切换到 root 用户执行这些命令。查看 Dockerfile,我建议在 CMD
指令之前添加 USER www-data
。
如果 www-data
用户 不存在 那么必须先添加它。 Alpine Linux 的命令是 addgroup and adduser。如果 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/
当我 运行 我的容器处于 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"]
以上请指教
您可以将此行添加到您的 docker 文件中,以成为 www-data
用户
USER www-data
这可以添加
- 在文件的末尾(如果您想在脚本退出前成为该用户),或
- 在 开头 如果您想以该用户身份在 docker 文件中执行操作。
我首先要检查 www-data
用户是否退出了图像。在 运行ning 容器中执行类似:
sudo cat /etc/passwd | grep www-data
如果用户 确实存在 然后在所有安装、创建目录、更改权限等命令之后将 USER www-data
指令添加到 Dockerfile。这将是如果基本映像不是 运行 作为 root,还需要在开头添加 USER 0
以切换到 root 用户执行这些命令。查看 Dockerfile,我建议在 CMD
指令之前添加 USER www-data
。
如果 www-data
用户 不存在 那么必须先添加它。 Alpine Linux 的命令是 addgroup and adduser。如果 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/