我有一个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
我希望这能帮助你:(