使用Serverspec测试在非根用户上运行的Dockerfile

使用Serverspec测试在非根用户上运行的Dockerfile,docker,rspec,dockerfile,sudo,serverspec,Docker,Rspec,Dockerfile,Sudo,Serverspec,我有一个Dockerfile,它使用Jenkins Swarm插件旋转Jenkins从节点。我在这张图片中设置了一个非root用户“jenkins”。jenkins用户有nvm设置。我正在尝试使用serverspec测试这个Docker映像,但我似乎找不到在server spec文件中以非root用户身份运行命令的方法 这确认用户jenkins已安装: describe user('jenkins') do it { should exist } it { should be

我有一个Dockerfile,它使用Jenkins Swarm插件旋转Jenkins从节点。我在这张图片中设置了一个非root用户“jenkins”。jenkins用户有nvm设置。我正在尝试使用serverspec测试这个Docker映像,但我似乎找不到在server spec文件中以非root用户身份运行命令的方法

这确认用户jenkins已安装:

  describe user('jenkins') do
    it { should exist }
    it { should belong_to_primary_group 'jenkins' }
  end
但我似乎无法做到这一点:

  describe command('whoami') do
    let(:sudo_options) { '-u jenkins -i' }
    its(:stdout) { should match 'jenkins' }
  end
我甚至试过这样的方法:

  describe command('sudo -u jenkins nvm --version') do
    its(:stdout) { should match(/0.33.0/) }
  end

正在寻求有关使用serverspec实现此功能的帮助。任何帮助都将不胜感激。

这为我解决了问题。如果有人阅读这篇文章有更好的方法,请一定让我知道

  describe command("node --version") do
    its(:stdout) { should match(/5.10.0/) }
  end

  describe command("su - jenkins -c 'node --version'") do
    its(:stdout) { should match(/6.9.5/) }
  end

  describe command("su - jenkins -c 'nvm --version'") do
    its(:stdout) { should match(/0.33.0/) }
  end

  describe command("su - jenkins -c 'nvm use 4.7.3'") do
    its(:stdout) { should match(/4.7.3/) }
  end

错误信息是什么?@BMW当我做“whoami”时,我期待着“jenkins”,但我得到了根。在nvm版本中,我期望“0.33.0”,但我得到了回报“