我无法从入口点脚本切换到非root用户。可以在Dockerfile中更改用户的User指令有效,但是我无法使用chmod更改权限。为了解决这个问题,我创建了entrypoint.sh
脚本来更改文件夹权限,但是当我尝试使用su
命令切换用户时,它显然不起作用,该容器仍以root用户身份运行。
Dockerfile
FROM php:7.2-fpm
# Installing dependencies
RUN apt-get update && apt-get install -y \
build-essential \
mysql-client \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl
# Installing composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV USER_ID=1000
ENV GROUP_ID=1000
ENV USER_NAME=www
ENV GROUP_NAME=www
RUN groupadd -g $GROUP_ID $GROUP_NAME
RUN useradd -u $USER_ID -ms /bin/bash -g $GROUP_NAME $USER_NAME
RUN mkdir /app
WORKDIR /app
EXPOSE 9000
COPY ./entrypoint.sh /
RUN ["chmod", "+x", "/entrypoint.sh"]
ENTRYPOINT ["/entrypoint.sh"]
Entrypoint.sh文件
#!/bin/bash
if [ -n "$USER_ID" -a -n "$GROUP_ID" ]; then
chown -R $USER_NAME:$GROUP_NAME .
su $USER_NAME
fi
php-fpm
exec "$@"
无论如何,我都无法从entrypoint.sh脚本切换用户。
我的情况是以非root用户身份运行容器。
答案 0 :(得分:1)
我认为您的su命令应该类似于
su $USERNAME --command "/doit.sh"
b / c您的企业脚本正在切换用户,不执行任何操作,然后切换回root。
答案 1 :(得分:0)
要解决此问题,您需要更改dockerfile并添加:
RUN echo "root ALL = NOPASSWD: /bin/su ALL" >> /etc/sudoers
或者使用gosu更好的方法:
# install gosu
# seealso:
# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
# https://github.com/tianon/gosu/blob/master/INSTALL.md
# https://github.com/tianon/gosu
RUN set -eux; \
apt-get update; \
apt-get install -y gosu; \
rm -rf /var/lib/apt/lists/*; \
# verify that the binary works
gosu nobody true
然后进入entrypoint.sh:
gosu root yourservice &
#ie: gosu root /usr/sbin/sshd -D &
exec gosu no-root-user yourservice2
# ie: exec gosu no-root-user tail -f /dev/null