Php docker compose:为什么我的webapp无法连接到mysql?
我正在尝试使用docker compose连接两个正在运行的容器:(1)一个webapp和(2)一个mysql db。我设置了下面提到的Php docker compose:为什么我的webapp无法连接到mysql?,php,mysql,docker,docker-compose,Php,Mysql,Docker,Docker Compose,我正在尝试使用docker compose连接两个正在运行的容器:(1)一个webapp和(2)一个mysql db。我设置了下面提到的docker compose.yml,但是我的webapp无法打开mysql的套接字。更具体地说,这个php@fsockopen函数抛出一个错误(第二种情况)。docker compose配置有什么问题吗 注意:idoit是webapp的名称 php案例 if (@fsockopen($l_dbHost, $l_t, $t_errno, $t_errstr, 5
docker compose.yml
,但是我的webapp无法打开mysql的套接字。更具体地说,这个php@fsockopen函数抛出一个错误(第二种情况)。docker compose配置有什么问题吗
注意:idoit是webapp的名称
php案例
if (@fsockopen($l_dbHost, $l_t, $t_errno, $t_errstr, 5)) {
$l_success = true;
$l_message = "CONNECTED";
$l_dbPort = $l_t;
} else {
$l_success = false;
$l_message = "ERROR (" . $t_errno . ")";
}
docker compose.yml
version: "3"
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: ****
MYSQL_DATABASE: ****
MYSQL_USER: ****
MYSQL_PASSWORD: ****
ports:
- '3306:3306'
expose:
- '3306'
volumes:
- db_data:/var/lib/mysql
idoit:
depends_on:
- db
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:80"
restart: always
environment:
IDOIT_DB_HOST: db:3306
IDOIT_DB_USER: ****
IDOIT_DB_PASSWORD: ****
IDOIT_DB_NAME: ****
volumes:
db_data: {}
似乎
idoit
服务无法使用mysql数据库访问网络
数据库服务有
网络:
-后端
还有idoit服务,你为什么用它来建立数据库连接,而不是用它呢?另外,为什么要在关键代码中抑制警告?还有一个术语说明:根据定义,PHP不是一个web应用程序(它不是在浏览器中运行,而是在服务器上运行),它充其量只是一个web应用程序的后端。我想你需要在两个容器中都有相同的网络(后端)。@Mike'Pomax'Kamermans这实际上不是我的PHP代码。我反向设计了webapp的代码,试图理解它失败的原因(因为它没有抛出错误消息),原因是这样的。@NigelRen正如我在回答belw中指出的,网络更多的是我删除的一个打字错误。默认docker compose网络将用于此任务。我也向idoit添加了
网络:-backend
,但它似乎不起作用。我还试图从这两个版本中删除networks指令。一定是别的原因。不过观察得不错。我现在从原来的帖子中删除了这个指令。可能你连接mysql的方式有问题。尝试任何官方api-