修改容器用户UID和GID

2021-05-02 • 预计阅读时间 1 分钟

docker容器内的用户也算是千奇百怪了……一般情况下是没有什么影响的,但是有时我们想通过volume把内容挂在出来的时候,就会出现权限的问题了。如果都改成777明显是不合适的。如LinuxServer提供的容器一般都会提供通过环境变量的方式来修改UIDGID。当然如果你千年不变的用root那么当我什么也没说了……

通过给TiddlyWiki制作docker镜像的时候,实现了一个动态修改UIDGID的方案。通过启动entrypoint.sh来修改容器内用户的信息达到和容器外用户一致的UIDGID

dockerfile

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

核心是通过groupmodusermod修改用户abcUIDGID。这两个软件在alpine中对应的软件包是shadow

devdocker

wentao

写点代码,解决点问题。

一次迫不得已Linux发行版本选择

Traefik使用ZeroSSL替换LetsEncrypt生成SSL证书