如何在 Docker 容器中测试 PHP API

我在 Docker 容器内有一个用 PHP/Symfony 构建的 api。我想测试一下。


要做到这一点 :


首先:我进入我的容器:docker-compose exec da-invoicing-php sh


第二:我运行测试:vendor/bin/simple-phpunit


在我的测试中,我有这个要求:


$result = $this->client->request(

        'POST',

        '10.110.167.124:8080/api/v1/course_invoices',

        [

            RequestOptions::HEADERS => [

                'Accept' => 'application/ld+json',

                'Content-Type' => 'application/json',

                'Authorization' => "Bearer {$this->token}",

            ],

            RequestOptions::BODY => json_encode([

                'courseInstanceId' => self::COURSE_INSTANCE,

            ]),

        ]

    );

如您所见,我向端点“'10.110.167.124:8080/api/v1.....”请求。它有效,但我知道我不能这样继续下去。


我尝试使用“localhost”、“localhost:8080”、“http://localhost”等...但没有成功。我总是有这个错误:


GuzzleHttp\Exception\ConnectException:cURL 错误 7:无法连接到 localhost 端口 8080:连接被拒绝(请参阅https://curl.haxx.se/libcurl/c/libcurl-errors.html)


那么如何在容器内进行这个测试呢?


潇潇雨雨
浏览 147回答 1
1回答

隔江千里

你不能在你的 PHP 容器中直接使用 localhost 它不提供 HTTP,它是 php-fpm。您必须调用 nginx 容器 da-invoicing-api$result = $this->client->request(    'POST',    'da-invoicing-api/api/v1/course_invoices',    [        RequestOptions::HEADERS => [            'Accept' => 'application/ld+json',            'Content-Type' => 'application/json',            'Authorization' => "Bearer {$this->token}",        ],        RequestOptions::BODY => json_encode([            'courseInstanceId' => self::COURSE_INSTANCE,        ]),    ]);Docker-compose为您的 compose 文件中的每个容器创建主机别名(同一网络上的其他容器可以使用该服务名称)。
打开App,查看更多内容
随时随地看视频慕课网APP