修改容器用户UID和GID
2021-05-02 • 预计阅读时间 1 分钟
2021-05-02 • 预计阅读时间 1 分钟
docker
容器内的用户也算是千奇百怪了……一般情况下是没有什么影响的,但是有时我们想通过volume
把内容挂在出来的时候,就会出现权限的问题了。如果都改成777
明显是不合适的。如LinuxServer
提供的容器一般都会提供通过环境变量的方式来修改UID
和GID
。当然如果你千年不变的用root
那么当我什么也没说了……
通过给TiddlyWiki
制作docker
镜像的时候,实现了一个动态修改UID
和GID
的方案。通过启动entrypoint.sh
来修改容器内用户的信息达到和容器外用户一致的UID
和GID
。
FROM node:lts-alpine3.13
MAINTAINER liuwentao@gmail.com
RUN \
echo "https://mirrors.cloud.tencent.com/alpine/v3.11/main/" > /etc/apk/repositories && \
echo "https://mirrors.cloud.tencent.com/alpine/v3.13/community/" >> /etc/apk/repositories && \
apk add shadow && \
useradd -u 666 -U -d /config -s /bin/false abc && \
usermod -G users abc && \
npm install -g tiddlywiki@5.1.23 --registry=https://registry.npm.taobao.org
EXPOSE 8080
VOLUME [ "/app" ]
WORKDIR /app
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
CMD [ "/entrypoint.sh" ]
#!/usr/bin/env sh
PUID=${PUID:-911}
PGID=${PGID:-911}
groupmod -o -g "$PGID" abc
usermod -o -u "$PUID" abc
groupmod -o -g "$PGID" abc
usermod -o -u "$PUID" abc
chown abc:abc /app
if [ ! -f "/app/tiddlywiki.info" ]; then
tiddlywiki /app --init server
fi
tiddlywiki /app --listen host=0.0.0.0
核心是通过groupmod
和usermod
修改用户abc
的UID
和GID
。这两个软件在alpine
中对应的软件包是shadow