无法在使用php-fpm和nginx的docker提供的apirest上运行phpunit测试



我有一个docker-compose.yml文件,我在其中配置以下服务:

  • nginx(web(->server_php_web_1
  • php-fpm(php(->服务器_php_php_1
  • mysql(db(->服务器_php_db_1

我的nginx在https上提供一个api rest php,vhost:back php.dev带有相关和工作证书

从外部码头,我可以卷曲后-高性能。dev没有问题

有一个目录测试,我可以在运行以下命令时运行该测试:

docker exec server_php_php_1 php /code/vendor/phpunit/bin /code/tests

但当我运行测试时,我得到了以下结果:

GuzzleHttpExceptionConnectException: cURL error 6: Could not resolve host: back-php.dev

我也尝试过以下几种:

docker exec -it server_php_php_1 /bin/bash
curl server_php_web_1

我可以成功地卷曲运行nginx的容器,但如果我想测试下面的url,我该怎么办https://back-php.dev

以下是docker-compose.yml的简化结构:

services:
web:
image: nginx:latest
ports:
- "80:80"
- "443:443"
networks:
- code-network
extra_hosts:
- "back-php.dev:127.0.0.1"
links:
- php
php:
build: ./
networks:
- code-network
db:
image: mariadb:10.1
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
networks:
- code-network
networks:
code-network:
driver: bridge

与php:关联的dockerfile

FROM phpdockerio/php74-fpm
RUN apt update
RUN apt install -y 
php7.4-pdo 
php7.4-json 
php7.4-curl 
php7.4-mbstring 
php7.4-common 
php7.4-mysql
RUN echo "ENV_NAME=dev" >> /etc/php/7.4/cli/php.ini

外部主机:-"back php.dev:127.0.0.1">

创建主机名映射"容器内部",而不是外部(主机(。


因此,如果你想从"外部"(主机(访问你的应用程序,你需要在/etc/hosts上创建一个新条目并添加

<container_ip> back-php.dev

要找到你的集装箱ip做

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

Update1:

php:
...
links:
- back-php.dev:web

我今天遇到了一个类似的问题,我解决了从PHP容器中以别名localhost提供Docker Host的问题,这样PHP容器将基于应用程序的URL(通常是localhost(运行测试,应用程序的网址(localhost(将转到Docker Host,所以Docker会根据映射的Container来服务HTTP/HTTPS请求,通常是80端口HTTP下的WebServer(NGINX Container(和443端口HTTPS下的WebServer。则WebServer将请求发送到PHP Container以运行PHP代码。

我在PHP Container上包含了主机localhost,指定为Docker主机IP,对我来说通常是192.168.65.2

docker run -it --rm alpine nslookup host.docker.internal

请求流:

[Test @ PHP Container] --> Docker Host ([NGINX @ WebServer Container]->[PHP Code @ PHP Container])

我的建议应该是这样的:

...
services:
web:
image: nginx:latest
ports:
- "80:80"
- "443:443"
networks:
- code-network
extra_hosts:
- "back-php.dev:127.0.0.1"
links:
- php
php:
build: ./
extra_hosts:
- "localhost:192.168.65.2"
networks:
- code-network
...

您必须更换:

  • "localhost";根据PHP测试的HTTP请求
  • "192.168.65.2";根据Docker主机IP

我希望这能帮助你:(

最新更新