Docker travis 上的容器-ci

Docker containers on travis-ci

我有一个 Dockerfile,我正在尝试使用 RSpec、serverspec 和 docker-api 进行测试。在本地(使用 boot2docker,因为我在 OS X 上)这很好用,我的所有测试都通过了,但是在 travis-ci none 上测试通过了。我的 .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 上。可能还有其他我不知道的问题

tl;博士

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


您的 Dockerfile 是问题所在。根据您提供的 github repository,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 提示,这意味着您的容器已停止 运行ning。如果您的容器没有启动,那么您的测试套件将失败。


docker文件有什么问题

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

为了运行nginx在前台,必须运行nginx -g daemon off;才能在Dockerfile for the official nginx image找到。但是因为你把 daemon off; 放在你的 nginx.conf 文件中,你应该只用 nginx.

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


服务器规格

一旦你得到一个 运行s 的容器,你将不得不专注于我没有经验的服务器规范部分。