gpt4 book ai didi

php - 从另一个Docker容器(同一主机,Apache)调用Docker容器中的API

转载 作者:行者123 更新时间:2023-12-02 21:11:40 25 4
gpt4 key购买 nike

情况:

我有两个运行两个Symfony 4应用程序的Docker容器。 cte_app和cte_fe。 cte_app暴露给主机上的端口8080,cte_fe暴露给端口80。

cte_app包含我需要与cte_fe一起使用的API方法。我可以很好地使用主机上cte_app上的API(使用Postman),但不能在使用cURL的PHP​​函数中通过cte_fe来使用,但出现连接被拒绝错误(使用localhost:8080和container-name(依赖))。当我使用Docker的网关地址时,可以很好地使用cte_fe容器中的API。但是我不能保证网关地址不会随着时间而改变。

在位于同一主机上的2个容器之间调用API端点的首选方法是什么?我在文档中是否缺少一些标志,将网关地址作为环境变量公开给了容器?

version: '3'
services:

cte_db:
image: mysql:5.7.24
restart: on-failure
container_name: cte_db
ports:
- "3306:3306"
volumes:
- /cte_data/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: somepassword
MYSQL_DATABASE: somedatabase
MYSQL_USER: someuser
MYSQL_PASSWORD: somepassword

cte_apache:
build: .docker/apache
container_name: cte_apache
ports:
- 8080:8080
- 80:80
volumes:
- .docker/config/vhosts:/etc/apache2/sites-enabled
- ./cte_app:/home/wwwroot/cte_app
- ./cte_fe:/home/wwwroot/cte_fe
depends_on:
- cte_fe
- cte_app

cte_app:
build: .docker/php
container_name: cte_app
volumes:
- ./cte_app:/home/wwwroot/cte_app
depends_on:
- cte_db

cte_fe:
build: .docker/php
container_name: cte_fe
volumes:
- ./cte_fe:/home/wwwroot/cte_fe
depends_on:
- cte_app
- cte_db

最佳答案

要使一个容器在这样的上下文中到达另一个容器,可以将docker-compose.yml文件中的服务名称用作主机名,并将容器内部进程正在侦听的TCP端口号用作端口号。该端口不需要专门公开或发布,并且不需要手动设置container_name:。 Docker Compose将为您处理Docker级网络设备。

可能通过环境变量来使其可配置通常是有益的,该变量还支持非Docker开发和Consul或Kubernetes Services这样的服务发现系统。

如果“fe”代表“前端”,并且实际上是通过浏览器应用程序建立的,则必须从浏览器的 Angular 考虑这一点:这些Docker细节根本不存在,并且如果必须使用绝对URL,您需要使用主机的DNS名称或IP地址以及服务器的发布端口。鉴于您所显示的可能是Apache代理,您将使用http://my.host.dns.name:8080/app这样的URL。

关于php - 从另一个Docker容器(同一主机,Apache)调用Docker容器中的API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54191697/

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