首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >travis-ci码头货柜

travis-ci码头货柜
EN

Stack Overflow用户
提问于 2015-09-01 22:14:20
回答 1查看 522关注 0票数 0

我有一个Dockerfile,我正在尝试使用RSpec、serverspec和docker进行测试。在本地(像我在OS上一样使用boot2docker ),这很好,而且我所有的测试都通过了,但是在travis-ci上,没有一个测试通过。我的.travis.yml文件是这样的:

代码语言:javascript
复制
language: ruby
rvm:
  - "2.2.0"

sudo: required
cache: bundler

services:
  - docker

before_install:
  - docker build -t tomasbasham/nginx .
  - docker run -d -p 80:80 -p 443:443 --name nginx -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf tomasbasham/nginx

script: bundle exec rspec

我是不是做了什么明显的错事?我创建并运行在travis-ci上的存储库在GitHub上。可能还有别的问题我不知道

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-01 23:45:07

tl;dr

容器必须在前台运行其程序。

你的Dockerfile才是问题所在。从您提供的github储存库中,Dockerfile内容是:

代码语言:javascript
复制
# Dockerfile for nginx with configurable persistent volumes

# Select nginx as the base image
FROM nginx
MAINTAINER Tomas Basham <me@tomasbasham.co.uk>

# Install net-tools
RUN apt-get update -q && \
    apt-get install -qy net-tools && \
    apt-get clean

# Mount configurable persistent volumes
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

# Expose both HTTP and HTTPS ports
EXPOSE 80 443

# ENTRYPOINT
ENTRYPOINT ["service", "nginx", "start"]

在调试RSpec/serverspec测试之前,应确保docker映像能够运行容器。

从包含Dockerfile的目录中键入以下命令:

代码语言:javascript
复制
docker build -t tmp .
docker run --rm -it tmp

如果您的shell提示返回给您,这意味着您的容器停止运行。如果您的容器没有启动,那么您的测试套件将失败。

dockerfile怎么了

您定义的ENTRYPOINT ["service", "nginx", "start"]入口点将执行一个命令,然后在后台中启动nginx程序。这意味着最初由docker (/bin/service)运行的进程将终止,docker将检测到该进程并停止您的容器。

要在前台中运行nginx,必须按照您在用于官方nginx映像的Dockerfile中找到的那样运行nginx -g daemon off;。但是,既然您将daemon off;放在nginx.conf文件中,那么只需使用nginx就可以了。

我建议您从您的Dockerfile中删除入口点(以及从您的nginx配置中删除daemon off; ),它应该可以正常工作。

serverspec

一旦您得到一个运行的容器,您将不得不专注于我不熟悉的serverspec部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32341701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档