gpt4 book ai didi

php - Docker 服务 php-fpm 容器之间的 cURL 导致 "Connection refused"

转载 作者:行者123 更新时间:2023-12-04 13:54:30 25 4
gpt4 key购买 nike

在寻找了 2 周的答案后,深入研究了 docker compose 和 docker 网络文档,我想在这里寻求一些帮助。
我正在创建两个 Web API 服务,我们称它们为后端 API ( back.api.dev ) 和前端 API ( front.api.dev )。
到目前为止我尝试过的:
后台API连接MySQL数据库,前台API只向后台API发送cURL请求。这两个 API 都建立在 Symfony 之上,并由 docker PHP-FPM 容器处理。一切都由 docker Apache 2.4 容器提供服务。
通过 Postman 和 cURL 请求发送请求到 back.api.dev & front.api.dev两者都很好用。它既适用于我的主机,也适用于 Apache 容器。我还加了 127.0.0.1 back.api.dev127.0.0.1 front.api.dev到我的 /etc/hosts主机文件。后台 API 也很好地连接到数据库。
但是当我向特定的前端 API 路由发送请求时,该路由使用 GuzzleHTTP 向后端 API 运行 cURL 请求客户端并将答案发回给用户,我得到一个 cURL error 7: Failed to connect to back.api.dev port 80: Connection refused (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://back.api.dev/api/videos/我还尝试从 front_api 中的 CLI 发送 cURL 请求。容器,但结果是一样的。我也试过直接发送到端口9000由 php-fpm 处理,但我得到一个 cURL error 56: Recv failure: Connection reset by peer错误。
这是docker-compose.yml文件 :

version: "3.8"

networks:
my_api_network:
driver: bridge
# external:
# name: my_api_network_default

services:
apache:
container_name: 'api_apache'
image: bitnami/apache:latest
ports:
- 8080:8080
# - 8443:8443
volumes:
- ./docker/apache/vhosts/back-api-dev.conf:/vhosts/back-api-dev.conf:ro
- ./docker/apache/vhosts/front-api-dev.conf:/vhosts/front-api-dev.conf:ro
volumes_from:
- php_backend_api
- php_frontend_api
depends_on:
- php_backend_api
- php_frontend_api
networks:
- my_api_network

php_backend_api:
hostname: 'back.api.dev'
container_name: 'php_backend_api'
build:
context: docker/php7-fpm
network: host
args:
TIMEZONE: 'UTC'
volumes:
- ./docker/php7-fpm/php.ini:/usr/local/etc/php/php.ini:ro
- ./back_api/:/var/www/back_api:cached
- ./back_api/vendor:/var/www/back_api/vendor:delegated
- /var/www/back_api/var/
networks:
- my_api_network

php_frontend_api:
hostname: 'front.api.dev'
container_name: 'php_frontend_api'
build:
context: docker/php7-fpm
network: host
args:
TIMEZONE: 'UTC'
volumes:
- ./docker/php7-fpm/php.ini:/usr/local/etc/php/php.ini:ro
- ./front_api/:/var/www/front_api:cached
- ./front_api/vendor:/var/www/front_api/vendor:delegated
- /var/www/front_api/var/
networks:
- my_api_network

db:
container_name: 'mysql_db'
image: mysql:5.7
restart: always
volumes:
- ./docker/data/mysql:/var/lib/mysql:delegated
- ./docker/mysql:/etc/mysql/conf.d:ro
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
TZ: ${TIMEZONE}
command: --sql_mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" --default-authentication-plugin=mysql_native_password
ports:
- 3306:3306
networks:
- my_api_network
这是我的后端 API Apache Virtualhost :
<VirtualHost *:8080>
ServerName back.api.dev

DocumentRoot "/var/www/back_api/public"

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php_backend_api:9000/var/www/back_api/public/$1

<Directory "/var/www/back_api/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.php

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
</IfModule>
</Directory>

LogLevel debug
# LogLevel warn
# LogLevel notice

ErrorLog /opt/bitnami/apache2/logs/error-back.log
CustomLog /opt/bitnami/apache2/logs/access-back.log combined

</VirtualHost>
我的猜测是 Apache 的配置不足以将传入的 curl 请求转发到 php-fpm 实例。我照顾 Docker networks , aliases , drivers , extra_hosts但到目前为止没有任何帮助来解决这个问题。
感谢您的帮助。

最佳答案

我认为没有网址 http://back.api.dev/api/videos/从前端。
也许它需要前端的主机条目,就像您在主机箱上所做的那样。
抱歉,我没有足够的分数将其作为建议评论而不是答案。

关于php - Docker 服务 php-fpm 容器之间的 cURL 导致 "Connection refused",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65010348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com