【问题标题】:docker-compose: Why does my webapp fail to connect to mysql?docker-compose:为什么我的 webapp 无法连接到 mysql?
【发布时间】:2021-04-16 14:04:56
【问题描述】:

我正在尝试连接两个正在运行的容器:(1) 一个 webapp 和 (2) 一个使用 docker compose 的 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: {}

【问题讨论】:

  • 为什么要使用fsockopen建立数据库连接,而不是使用pdo?另外,你为什么要压制关键代码中的警告?并且在术语说明上:根据定义,PHP 不是 Web 应用程序(它不在浏览器中运行,而是在服务器上运行),它充其量只是一个 Web 应用程序的后端。
  • 认为您需要在两个容器中拥有相同的网络(后端)。
  • @Mike'Pomax'Kamermans 这实际上不是我的 php 代码。我对 webapp 的代码进行了逆向工程,试图了解它失败的原因(因为它没有抛出任何错误消息),原因就是这个。
  • @NigelRen 正如我在下面的答案中指出的那样,网络更像是我删除的错字。默认的 docker-compose 网络将完成此任务。

标签: php mysql docker docker-compose


【解决方案1】:

似乎idoit 服务无法使用 mysql 数据库访问网络。

数据库服务有


networks:
      - backend

和 idoit 服务 - 没有

【讨论】:

  • 我也将networks: - backend 添加到了 idoit,但它似乎不起作用。我还尝试从两者中删除网络指令。它必须是别的东西。不过很好的观察。我现在从原始帖子中删除了该指令。
  • 您连接到 mysql 的方式可能存在问题。尝试任何官方 api - php.net/manual/en/mysqlinfo.api.choosing.php
猜你喜欢
  • 2020-02-12
  • 2021-06-16
  • 2017-07-05
  • 2019-08-28
  • 2021-12-23
  • 2019-08-02
  • 2017-11-18
  • 1970-01-01
相关资源
最近更新 更多