在Travis-ci内部创build的Docker容器不能提供NGINX端口进行testing

我正在使用Docker镜像来进行我的项目的functiontesting。 这个图像是基于高山,并有supervisord运行的nginx和php-fpm服务,我的functiontestingrest调用这个docker实例。

基本上.travis.yml:

  • build立图像
  • 启动容器
  • 调用PHPUnit来testing;

图像创build正常,容器是UP的。 我添加了一些debugging信息来validation这一点:

>> docker run -d --rm --name resttemplate-test-instance -v /home/travis/build/byjg/php-rest-template:/srv/web -p "127.0.0.1:80:80" resttemplate-test f3986de1c86629123896a0aa7f6ec407f617f261383c3b6a358e9dfcd3d06d77 Exit status : 0 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f3986de1c866 resttemplate-test "docker-php-entryp..." Less than a second ago Up Less than a second 443/tcp, 127.0.0.1:80->80/tcp, 9000/tcp resttemplate-test-instance $ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' resttemplate-test-instance 172.17.0.2 

但是当PHPUnit运行时,我得到了每个testing的后续消息:

 cURL error 56: Recv failure: Connection reset by peer (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) 

如果我一行一行地重复在我的本地环境.travis.yml中存在的所有步骤一切正常。 这个错误只发生在特拉维斯。

以下是构build失败的链接: https : //travis-ci.org/byjg/php-rest-template/jobs/305476720#L728

这里有我的.travis.yml:

 sudo: required language: php php: - "7.1" - "7.0" - "5.6" env: - APPLICATION_ENV=test services: - docker install: - composer install - composer restdocs - composer migrate -- reset --yes - composer build - docker ps -a - docker inspect resttemplate-test-instance - docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' resttemplate-test-instance - sudo chown 82:82 src/sample.db - sudo chown 82:82 src/ script: - phpunit 

挖到互联网我发现这个问题: https : //github.com/travis-ci/travis-ci/issues/6461

有一个build议,通过添加“睡眠15”,等待docker实例开始运行。 有效!