我有一个Dockerfile,我正在尝试使用RSpec、serverspec和docker进行测试。在本地(像我在OS上一样使用boot2docker ),这很好,而且我所有的测试都通过了,但是在travis-ci上,没有一个测试通过。我的.travis.yml文件是这样的:
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上。可能还有别的问题我不知道
发布于 2015-09-01 23:45:07
tl;dr
容器必须在前台运行其程序。
你的Dockerfile才是问题所在。从您提供的github储存库中,Dockerfile内容是:
# 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的目录中键入以下命令:
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部分。
https://stackoverflow.com/questions/32341701
复制相似问题