使用 -u 1000:1000 选项进行 docker run 时,Jenkins docker sudo 错误

问题描述 投票:0回答:1

我有一个 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
)不是一个选项。

我有两个问题:

  1. 有没有办法让 Jenkins 在没有
    -u
    选项的情况下启动 docker?
  2. 有没有办法使用
    -u
    选项启动 docker 并仍然运行 sudo 命令?
docker jenkins cicd
1个回答
0
投票

我已将

-u
更改为
-u user:sudo
,现在问题已解决。

© www.soinside.com 2019 - 2024. All rights reserved.