我有一个 docker 映像,可在使用以下 DockerFile 创建的 Jenkins 管道中使用:
# base
FROM ros:noetic
# user
WORKDIR /home/user
RUN useradd --create-home --shell /bin/bash user \
&& echo "user:my_cool_pass" | chpasswd && adduser user sudo \
&& chown user .
USER user
和命令
docker build -f DockerFile -t apalomer/test_repo:test_image .
。当我使用 docker run --rm -it apalomer/test_repo:test_image /bin/bash
启动 docker 时,我可以运行 sudo su
并输入 root 密码。但是,当我使用 docker run --rm -it -u 1000:1000 apalomer/test_repo:test_image /bin/bash
启动 docker 时,我无法启动,并且在输入正确的密码后收到以下错误:user is not in the sudoers file. This incident will be reported.
。为了尝试调试问题,我已经检查过,ID 1000的用户在主机和容器中都是root(无论我如何启动docker容器,结果都是相同的):
user@ed0f0dedba47:~$ echo $UID
1000
user@ed0f0dedba47:~$ grep -Po '^sudo.+:\K.*$' /etc/group
user
user@ed0f0dedba47:~$ id -u user
1000
在主机中运行这些命令,uid 也是 1000,并且用户名(不是 user)出现在 sudo 组中。
问题是,我无法找到一种方法让 Jenkins 在没有
-u 1000:1000
的情况下运行 docker 映像,并且在使用此映像的管道期间,我必须运行一些 sudo 命令。由于项目限制,在容器中使用不同用户的选项(即删除最后一行 User user
)不是一个选项。
我有两个问题:
-u
选项的情况下启动 docker?-u
选项启动 docker 并仍然运行 sudo 命令?我已将
-u
更改为-u user:sudo
,现在问题已解决。