【发布时间】:2017-11-23 00:31:54
【问题描述】:
我正在使用 docker 映像对我的项目进行功能测试。此映像基于 alpine,并由 supervisord 运行 nginx 和 php-fpm 服务,我的功能测试对这个 docker 实例进行了休息调用。
基本上是 .travis.yml:
- 构建映像
- 启动容器
- 调用PHPUnit进行测试;
图像创建良好,容器已启动。我添加了一些调试信息来验证这一点:
>> 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 运行时,每次测试我都会收到以下消息:
cURL error 56: Recv failure: Connection reset by peer (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
如果我在本地环境中逐行重复 .travis.yml 中存在的所有步骤,一切正常。这个错误只发生在travis中。
这是构建失败的链接: 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
【问题讨论】: