jenkinsdocker插件pipe道使用-u标志,怎么可能不使用

我用docker插件使用jenkins版本2.89.1。 在声明式pipe道阶段,我启动了一个安装了2.4.x的Docker容器,以便运行一些剧本,如下所示:

agent { docker { image 'myself/ansible:1.0.3' registryUrl 'https://my-artifactory-pro' registryCredentialsId 'my-credentials' args '-v /var/lib/jenkins/workspace/myworkspace:/tmp/' + ' -v /var/lib/jenkins/.ssh:/root/.ssh' } } steps { echo 'Deploying Ansible Server via docker image' sh "ansible-playbook -i /tmp/my-inventories-path/ /my-playbooks/teardown.yaml "+ "--extra-vars 'platform=ec2 aws_access_key=${AWS_ACCESS_KEY_ID} aws_secret_key=${AWS_SECRET_ACCESS_KEY} "+ " eip_bastion_host=${EIP_BASTION_HOST} eip_load_balancer=${EIP_LOAD_BALANCER} '" } 

pipe道设法旋转docker集装箱,并试图执行正确的剧本,但我面临以下问题:

 + ansible-playbook -i /tmp/my-inventories/ /tmp/my-playbooks/teardown.yaml --extra-vars platform=ec2 aws_access_key=**** aws_secret_key=**** eip_bastion_host=XXXX eip_load_balancer=XXXX [WARNING]: Unable to set correct type for configuration entry: DEFAULT_LOCAL_TMP PLAY [localhost] *************************************************************** TASK [install_python_pip : Create pip folder] ********************************** An exception occurred during task execution. To see the full traceback, use -vvv. The error was: KeyError: 'getpwuid(): uid not found: 112' fatal: [localhost]: FAILED! => {"msg": "Unexpected failure during module execution.", "stdout": ""} to retry, use: --limit @/tmp/my-playbooks/teardown.retry PLAY RECAP ********************************************************************* localhost : ok=0 changed=0 unreachable=0 failed=1 

看看jenkins日志,我看到,当它旋转docker集装箱启动以下列方式:

 docker run -t -d -u 112:116 -v /var/lib/jenkins/workspace/my-workspace --entrypoint cat myself/ansible:1.0.3 

112是jenkins uid,116是jenkins gid。

如果我在同一个容器中启动相同的安全操作手册,而不使用-u标志,则可以正常工作。

那么是否可以启动没有-u标志的容器 ? 为什么被认为docker集装箱应该有同样的jenkins服务器的uid&gid?

提前感谢Marco

默认情况下,当用户没有被指定的时候,docker会使用在dockerfile中定义的用户启动容器,如果没有指定root用户。 您可以尝试通过传递来强制默认用户:

 args '-u root:root -v /var/lib/jenkins/workspace/myworkspace:/tmp/' + ' -v /var/lib/jenkins/.ssh:/root/.ssh'