我正在尝试在Alpine Linux Docker容器中创建一个UID
1340816314
的新用户,以使用户UID
与主机上的特定用户匹配。
问题在于,即使我通过跟随adduser man page重新定义adduser: number 1340816314 is not in 0..256000 range
内UID_MAX
的值,我也面临/etc/login.defs
。我不认为它对Alpine is from BusyBox中的adduser
命令有任何影响。
以下是我尝试做的日志:
$ docker run -it --rm alpine:3.4 sh
/ # adduser -D -g '' -u 1340816314 user
adduser: number 1340816314 is not in 0..256000 range
/ # echo "UID_MAX 1340816314" > /etc/login.defs
/ # adduser -D -g '' -u 1340816314 user
adduser: number 1340816314 is not in 0..256000 range
/ # echo "UID_MAX 1340816315" > /etc/login.defs
/ # adduser -D -g '' -u 1340816314 user
adduser: number 1340816314 is not in 0..256000 range
您是否知道如何在Docker容器中的Alpine Linux中添加具有大UID
的用户?
答案 0 :(得分:5)
这是一个有效但又脏的解决方法,通过手动创建用户,使用$UID_TO_SET
作为包含要设置的高UID
的bash变量:
# Create user
echo "user:x:$UID_TO_SET:$UID_TO_SET::/home/user:" >> /etc/passwd
## thanks for http://stackoverflow.com/a/1094354/535203 to compute the creation date
echo "user:!:$(($(date +%s) / 60 / 60 / 24)):0:99999:7:::" >> /etc/shadow
echo "user:x:$UID_TO_SET:" >> /etc/group
mkdir /home/user && chown user: /home/user
答案 1 :(得分:2)
对于Alpine中的高UID / GID,有一种更为优雅的解决方案。
包shadow
contains,useradd
和groupadd
实用程序,它们又支持更高的值。不确定哪个utils的上限以及是否支持整个2 ^ 32空间,但是我已经测试了超过6亿的值,并且可以正常工作。
例如,用于实现此目的的命令如下所示:
UID=666000666
GID=999000999
apk add shadow
/usr/sbin/groupadd -g ${GID} my_group
/usr/sbin/useradd -s /bin/sh -g ${GID} -u ${UID} my_user
请注意,我正在将shell变量传递给useradd
,因为默认情况下它会尝试使用未安装的/bin/bash
。