Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php docker compose:为什么我的webapp无法连接到mysql?_Php_Mysql_Docker_Docker Compose - Fatal编程技术网

Php docker compose:为什么我的webapp无法连接到mysql?

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连接两个正在运行的容器:(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)) {
                        $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-