当尝试在CircleCI上对Docker容器进行测试时出现错误

首先

我尝试在CircleCI上测试Docker容器。由于遇到了很多错误,所以我留下了解决方法。

用CircleCI测试Docker镜像

这几乎是上述文章中提到的内容。

环境

    • CircleCI

 

    • Docker

 

    Serverspec

LXC驱动不支持Exec。

  1) nodejs Package "nodejs" should be installed
     Failure/Error: it { should be_installed }
     Docker::Error::ServerError:
       Unsupported: Exec is not supported by the lxc driver

由于 docker exec 无法通过,测试失败了。

原因是CircleCI平台的规格限制。在CircleCI的说明页面上也写明了无法使用docker exec命令。

由于我们在Docker中使用LXC驱动程序,并且LXC驱动程序的docker exec尚未被实现,所以docker exec在我们的容器中无法运行。

解决方案 (jiě jué àn)

通过将specinfra版本固定为”2.12.7″,可以以不使用docker exec的形式运行测试。

source 'https://rubygems.org'

gem 'docker-api'

group :test do
  gem 'specinfra', '2.12.7'
  gem 'serverspec'
end

一旦进行变更后,务必不要忘记使用bundle update来更新gemfile.lock。

无法摧毁容器

  1) nodejs Package "nodejs" should be installed
     Failure/Error: it { should be_installed }
     Docker::Error::ServerError:
       Cannot destroy container b9df599afbb6c921573f44cf2e5724be837647131a20f7168c4a28b19bfb3984: Driver btrfs failed to remove root filesystem b9df599afbb6c921573f44cf2e5724be837647131a20f7168c4a28b19bfb3984: Failed to destroy btrfs snapshot: operation not permitted

由于docker rm无法通过,测试失败了。

由于CircleCI权限不被允许,所以显示“操作不允许”。

解决办法

为了避免使用docker rm命令,我们将仅部分修改Serverspec的行为。

参考:avatarnewyork/dockerenv_apache

在*_spec.rb文件中添加。

# Workaround needed for circleCI
if ENV['CIRCLECI']
  class Docker::Container
    def remove(options={}); end
    alias_method :delete, :remove
  end
end
广告
将在 10 秒后关闭
bannerAds